Aller au contenu

Caractères spéciaux dans une url


michmuch51

Sujets conseillés

Bonjour, je souhaterai connaitre la fonction pour virer les caractères du genre "+" ou "%" dans mes url exemple ici: -http://www.terroirexperience.com/annuaire-vin/Vin++Vall%E9e+du+Rh%F4ne-16.htm

C'est à l'origine du rewriting et mon url est générée par cette fonction:

RewriteRule ^(.*)-([0-9]+)\.htm$  /annuaire-vin/index.php?cat_id=$2&title=$1 [L]

Merci parce que là je galère :boude:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour, je souhaterai connaitre la fonction pour virer les caractères du genre "+" ou "%"

urldecode()

Ces %xx sont la manière normale de coder un accent ou un caractère spécial dans une URL. Le plus code lui l'espace.

Tu as fait un lien avec des caractères non ascii. Tu n'en as normalement pas le droit, c'est théoriquement incorrect. C'est ton navigateur qui, conciliant, a intercepté le problème et a converti les caractères accentués en %xx

Mettre les caractères accentués dans les liens "marche" souvent mais devrait être évité. Suivant le codage caractère en cours, suivant celui de la page, suivant le navigateur, le même caractère risque de se convertir en des %xx différents (et donc ne pas donner la bonne page).

mon url est générée par cette fonction:

Sauf erreur de ma part ton rewrite ne génère pas l'url, c'est tout le contraire, il l'intercepte et l'interprête.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Salut Ganf si je rajoute la fonction urldecode() à mes liens alors que je suis déjà en urlencode() ca donne ca

http://www.terroirexperience.com/annuaire-vin/Vin%20%20Vall%E9e%20du%20Rh%F4ne-16.htm

Donc inutile de te dire que le serveur m'envoi une bad request... :blink:

<edit>je cherche surtout à remplacer mes "+" par des "-" et %E9 par "e"</edit>

Modifié par michmuch51
Lien vers le commentaire
Partager sur d’autres sites

Salut Ganf si je rajoute la fonction urldecode() à mes liens alors que je suis déjà en urlencode()

Non non, ce n'était pas pour chaîner les deux à la suite dans la page qui créé les liens que je te disais ça, sinon il n'y a effectivement aucun intérêt (ça revient grosso modo au même)

<edit>je cherche surtout à remplacer mes "+" par des "-" et %E9 par "e"</edit>

ok, j'ai mal compris la question alors.

On efface tout et on recommence.

Il n'y a à ma connaissance aucune fonction native pour faire ça. Si tu as un nombre de caractères spéciaux limités tu peux les lister et faire un str_replace. Sinon d'autres personnes ont déjà fait des str_replace complets (avec les majuscules accentées et tous les caractères zarb), tu pourras les retrouver sur le net. Il te faudra juste rajouter les espaces si tu veux les convertir en tiret

Une autre option bien lourde c'est convertir les accents et caractères spéciaux en entités html. "é" deviendra "&eactue;" et ainsi de suite. Sauf quelques exceptions, la première lettre après le & correspond à ce que tu cherche à mettre en remplacement. Tu peux t'en servir pour reconstruire ton texte. Donc : convertir à la main les exceptions et les espaces, convertir le reste en entité, rechercher toutes les entités pour les reconvertir à leur tour en utilisant la première lettre de l'entité quand c'est une entité non numérique.

Lien vers le commentaire
Partager sur d’autres sites

Si tu as un nombre de caractères spéciaux limités tu peux les lister et faire un str_replace

J'étais déjà sur cette piste, mais il est vrai que je ne l'ai jamais utilisé donc je crois que je vais devoir m'y mettre (encore quelques heures de taffes pour comprendre) :wacko:

En tout cas merci Ganf ... ^_^

Lien vers le commentaire
Partager sur d’autres sites

function clean_url($url) {
$tab = array(' ', '&');
$clean = str_replace($tab, '-', $url);
return strtolower(utf8_encode($clean));
}

J'utilise cette fonction pour l'upload d'images. Les espaces et & sont remplacés par des tirets.

Lien vers le commentaire
Partager sur d’autres sites

bon ok, je capitule, je n'y arrive pas  :wacko:

Un petit tuto ou un exemple seraient les bien venus ...  :whistling:

<{POST_SNAPBACK}>

Il y a autant de tutoriaux que de codes sources disponibles.

Au hasard, c'est interessant de voir par exemple comment des applications comme DotClear generent a la volee des URL "propres", cad sans caracteres accentues ou exotiques.

function str2url($str)

{

  if ($this->encoding == 'UTF-8') {

$str = $this->removeEntities(utf8_decode($str));

  } else {

$str = $this->removeEntities($str);

  }

 

  $str = strtr($str, "ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn");

  $str = preg_replace('/[^a-z0-9_-\s]/', '', strtolower($str));

 

  $str = preg_replace('/[\s]+/', ' ', trim($str));

  $res = str_replace(' ', '-', $str);

  return $res;

}

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,soir,

Bonjour, je souhaterai connaitre la fonction pour virer les caractères du genre "+" ou "%" dans mes url exemple ici: url à changer

Pourquoi en arrives-tu à avoir ce genre d'url ? Je veux dire par là sur quel principe sont-elles construites ?

xpatval

Modifié par xpatval
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...