Aller au contenu

Sujets conseillés

Posté

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:

Posté
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.

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
Posté
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.

Posté
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 ... ^_^

Posté

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.

Posté
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;

}

Posté (modifié)

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
Posté

Merci à tous...

La soluce etait pas si loin en effet...

j'ai utilisé:

ereg_replace()

Tres pratique et maintenant j'ai des url tres propres ;)

Résolu :lol:

Encore merci pour votre aide...

Veuillez vous connecter pour commenter

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



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