web-dev-qa-db-fra.com

Représentation des caractères accentués dans l'URL

Nous avons un support pour différentes langues sur notre site Web, dont l'espagnol, le français et le suédois.

Pour le moment, les liens du site ne sont PAS codés avant d’être envoyés au navigateur, ce qui envoie les caractères réellement accentués (le cas échéant, c’est-à-dire href = "www. (Point) exemple (point) com/héllo.html") et non leur Représentation HEX.

Cela fonctionne et semble bon sur tous les navigateurs, y compris Chrome, FF et IE.

Cependant, nous nous soucions beaucoup du référencement.

Nous avons eu cette astuce qui encodait les liens avant de les envoyer au navigateur (donc au lieu de créer un lien vers http://www.example.com /héllo, nous allons créer un lien vers http://www.example.com/h%E9llo ) améliorera la façon dont les moteurs de recherche "comprendront" les liens et les mots-clés contenus dans l'URL.

Cela implique un travail de notre part, nous avons donc voulu savoir s'il y avait du vrai dans ce conseil, mais nous n'avons rien trouvé qui réponde à ce problème.

4
Dan

selon Google :

Oui, nous pouvons généralement suivre les URL encodées en UTF-8 et nous les montrerons généralement aux utilisateurs dans nos résultats de recherche (mais le lien vers votre serveur avec les URL correctement protégées). Je vous recommanderais également d’utiliser des URL échappées dans vos liens pour vous assurer que votre site est compatible avec les navigateurs plus anciens qui ne comprennent pas les URL UTF-8 directes.

Donc, encoder vos URL semble être un moteur de recherche convivial. Mais votre meilleur choix peut être de simplement supprimer ces caractères spéciaux et de les remplacer par les alternatives "non spéciales". Cette réponse StackOverflow montre un code génial pour le faire:

Essayez ces fonctions:

<?php
function Slug($string, $slug = '-', $extra = null)
{
  return strtolower(trim(preg_replace('~[^0-9a-z' . preg_quote($extra, '~') . ']+~i', $slug, Unaccent($string)), $slug));
}

function Unaccent($string)
{
  return html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|Grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8');
}
?>

Et utilisez-le comme ceci:

<?php 
echo Slug('Iñtërnâtiônàlizætiøn of Glaño'); // internationalizaetion-of-glano
?> 

Vous pouvez intégrer le code Unaccent() à la fonction Slug() si vous souhaitez ne disposer que d'une seule fonction.

7
John Conde