Bon j'ai testé et ça a l'air de marcher :P
Vous vouliez du code ? En voilà :
J'utilise un CMS qui gère le SEF mais j'ai un module tiers qui lui ne le gère pas.
Ce module tiers retourne du code html dans une variable $content qui peut contenir une ou plusieurs urls. Ces urls ne sont pas conforme W3C puisque les quotes manquent mais bon les browsers comprennent...
J'ai donc ajouté le code qui sert à transformer les urls pour le contenu html du CMS à la fin du module (juste avant le return) :
Citation:
$regex = "#href=\"(.*?)\"#s";
$content = preg_replace_callback( $regex, 'sef_replacer', $content );
La fonction sef_replacer fait le boulo de transformation url standards ==> urls modifiées SEF.
Le pb était que ce regex suppose que les urls sont entourées de double quotes ! Il fallait donc le changer.
J'ai donc opté pour le regex du premier post :
Citation:
$regex = "#href=(.*?)( |>)#s";
Mais comme la fonction preg_replace_callback retourne un tableau $matches dont les composantes (d'indices 1, 2, ...) correspondent aux sous-masques du regex et que le remplacement se fait sur la totalité du regex et non sur le premier sous-masque il fallait aussi changer la fonction sef_replacer en sef_replacer_2 :
Citation:
$content = preg_replace_callback( $regex, 'sef_replacer_2', $content );
avec :
Citation:
function Sef_replacer_2( &$matches ) {
return Sef_replacer( &$matches ) . $matches[2];
}
Voilà vous savez tout.
Je pense que c'est ok en dehors du simple fait que ça a l'air de marcher mais bon j'ai découvert les expressions régulières ce matin 8O donc j'aimerai bien avoir le feedback d'une personne qui a un peu plus de recul sur la question...
-Fly06