Aide fonction preg_remplace(_callback)

Kaiofking
Invité n'ayant pas de compte PHPfrance

02 déc. 2013, 20:45

Bonjour à tous,

Voilà j'ai pour objectif de créer un système de "hash-tags", mais avec des * à la place des #
J'ai fait une fonction pour transformer les caractères accentués comme ça :
function convert_accent($text){
$text_done = preg_replace(array('/À/','/Á/','/Â/','/Ã/','/Ä/','/Å/','/à/','/á/','/â/','/ã/','/ä/','/å/','/Ò/','/Ó/','/Ô/','/Õ/','/Ö/','/Ø/','/ò/','/ó/','/ô/','/õ/','/ö/','/ø/','/È/','/É/','/Ê/','/Ë/','/è/','/é/','/ê/','/ë/','/Ç/','/ç/','/Ì/','/Í/','/Î/','/Ï/','/ì/','/í/','/î/','/ï/','/Ù/','/Ú/','/Û/','/Ü/','/ù/','/ú/','/û/','/ü/','/ÿ/','/Ñ/','/ñ/'),array('a','a','a','a','a','a','a','a','a','a','a','a','o','o','o','o','o','o','o','o','o','o','o','o','e','e','e','e','e','e','e','e','c','c','i','i','i','i','i','i','i','i','u','u','u','u','u','u','u','u','y','n','n'),$text);
return $text_done;
}
Maintenant j'aimerais faire une fonction qui dans une chaine cherche les tags, et les remplace par un lien vers la page du tag, MAIS ce lien doit linker vers l'url du tag sans accent..
Puisque un exemple vaut plus que miles discours, disons que :
Voilà une petite démo des *labels, ou étiquettes que l'on peut mettre dans un message, pour retrouver les autres pensée du même *thème.
Devrais donner :
Voilà une petite démo des <a href="/Tag-label">*labels</a>, ou étiquettes que l'on peut mettre dans un message, pour retrouver les autres pensée du même <a href="/Tag-theme">*thème</a>.
Pour le moment j'ai ça :
function find_url_label($message,$url_label)
{
	$message_traite = preg_replace('/(^|[^a-z0-9_])\*([a-z0-9ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ_]+)/i'), ' <a href="'.$url_label.'$2">*$2</a>'), $message);
	return $message_traite;
}
Et c'est sur "$2" dans l'URL que je voudrais appliquer la fonction convert_accent();
Quelqu'un a des idées ? J'ai aussi essayé avec _callback je ne comprend pas le fonctionnement, il ne remplace pas dans la chaine, mais met les éléments trouvés devant la chaine.

Merci d'avance :)