[spip-dev] URLS avec accents

Salut,

Je viens de faire une modif sensible sur
/action/editer_url.php

J'ai introduit un define supplémentaire, _TRANSLITTERER_URL
Par défaut, cette valeur est "true". Si on la fixe à false, les caractères des URL ne sont pas translittérés et donc renvoyés en UTF-8.

Ce qui permet, quand on a configuré le serveur pour que ça prenne en compte les URL en unicode, d'obtenir:
http://monsite.net/tags/téléphoner
qui est différent de:
http://monsite.net/tags/telephoner

Sur l'insertion de ce define, ça ne me semble pas poser de souci. En revanche, ça m'oblige à modifier la ligne 56, qui sert à remplacer tout ce qui n'est pas un caractère a-z0-9 par un tiret, par:
  $mots = preg_split(",[\s]+,", $url);

Parce que la version précédente remplaçait alors toutes les lettres accentuées (en #TRANSLITTERER_URL à fase) par des tirets.

=> Et là, je crains que ça ne modifie les URL existantes.

J'ai donc besoin de votre expertise sur ce point.

Arnaud

Et au fait, pour activer les URL avec des accents (ou en arabe, etc.), je modifie dans la config de php.ini:
mbstring.internal_encoding = UTF-8;

Arnaud

Pour ne prendre aucun risque, on peut garder la regexp precedente en cas TRANSLITTERER_URL a true, et la nouvelle pour le cas false.
Est-ce qu'un
preg_split(",[^\w]+,", $url);
ou
preg_split(",[^\w]+,u", $url);
ne conviendrait pas mieux dans ce dernier cas ?

Cédric

Pour ne prendre aucun risque, on peut garder la regexp precedente en cas TRANSLITTERER_URL a true, et la nouvelle pour le cas false.

Oui, bonne idée. Je commit ça.

Est-ce qu’un
preg_split(« ,[^\w]+, », $url);
ou
preg_split(« ,[^\w]+,u », $url);
ne conviendrait pas mieux dans ce dernier cas ?

Non, parce que \w ne semble pas reconnaître les caractères accentués. Je suppose qu’il faudrait quelque chose basé sur un mb_split, plutôt, mais je ne parviens pas à le faire fonctionner avec cette fonction.

Pour l’instant, sur mes essais, le preg_split(« ,[\s]+, », $url) donne de bons résultats.

Arnaud