Php: Expressions régulières et accents
yveslands
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
yveslands -
yveslands -
Bonjour,
j'ai une fonction qui cherche une sous chaîne de caractères dans une chaîne et la remplace par son équivalent en gras (<strong>$sous_chaine</strong>) grâce à une regex. Le problème est que les accents ne sont pas conservés si la chaîne dans laquelle on effectue la recherche comporte des caractères accentués. J'obtiens une sorte de losanges avec des points d'interrogation à l'intérieur(??).
Quelqu'un pourrait-il m'aider? Merci d'avance
Voici ma fonction:
j'ai une fonction qui cherche une sous chaîne de caractères dans une chaîne et la remplace par son équivalent en gras (<strong>$sous_chaine</strong>) grâce à une regex. Le problème est que les accents ne sont pas conservés si la chaîne dans laquelle on effectue la recherche comporte des caractères accentués. J'obtiens une sorte de losanges avec des points d'interrogation à l'intérieur(??).
Quelqu'un pourrait-il m'aider? Merci d'avance
Voici ma fonction:
function highLight($words, $str) { $words = preg_split("/[\s,-]+/", $words); $highlight = '<strong>$0</strong>'; $pattern = '#(?!<.*?)(%s)(?![^<>]\p{L}*?>)#i'; foreach ($words as $word) { $word = preg_quote($word); $regex = sprintf($pattern, $word); $str = preg_replace($regex, $highlight, $str); } return $str; }
A voir également:
- Php: Expressions régulières et accents
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
5 réponses
Bonjour,
Une piste : indique que l'expression rationnelle s'applique sur des caractères Unicode avec le modificateur u :
$words = preg_split("/[\s,-]+/u", $words);
$pattern = '#(?!<.*?)(%s)(?![^<>]\p{L}*?>)#iu';
Vérifie également que ton fichier php est bien encodé en UTF-8, de même que le fichier php qui appelle ta fonction.
Xavier
Une piste : indique que l'expression rationnelle s'applique sur des caractères Unicode avec le modificateur u :
$words = preg_split("/[\s,-]+/u", $words);
$pattern = '#(?!<.*?)(%s)(?![^<>]\p{L}*?>)#iu';
Vérifie également que ton fichier php est bien encodé en UTF-8, de même que le fichier php qui appelle ta fonction.
Xavier
Merci pour ta réponses mais ça n'a pas fonctionner. j'obtiens tjrs ces bizarres losanges avec des points d'interrogations à l'intérieur.
Ok c bon. les erreurs d'accents apparaissent si $words est vide. une simple condition if avant l'affichage règle ce problème. Mais il en demeure un autre. Quand j'execute le code avec
rien ne se passe pourtant il existe 'Córdoba' dans la chaine de recherche. voici ma regex
est-ce correct?
$text = 'cordoba'
rien ne se passe pourtant il existe 'Córdoba' dans la chaine de recherche. voici ma regex
$pattern = '#(?!<.*?)(%s)(?![^<>]\p{L}*?>)#iu';
est-ce correct?
Tu est en utf8 visiblement. au debut de t'est fichier principeaux, place ce code
en le mettant bien sur en adéquation avec ton encodage.
cela permettra d'utiliser les versions mb_ des fonction php tel que mb_strtolower($a,'UTF-8');.
pour la regex, essaye avec
mb_internal_encoding('UTF-8');
en le mettant bien sur en adéquation avec ton encodage.
cela permettra d'utiliser les versions mb_ des fonction php tel que mb_strtolower($a,'UTF-8');.
pour la regex, essaye avec
$str=preg_replace($regex,$highlight,utf8_decode($str));
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ta réponse Stanislas. Mais je n'ai plus de problème d'affichage. J'aimerais juste pouvoir mettre les mots qui contiennent des caractères accentués en gras. Comme je le disais tantôt si ma chaîne contient 'Córdoba' rien ne se passe si je fait
highlight('cordoba', $chaîne). j'aimerai que ma regex considère cordoba et Córdoba comme une même chaîne.
Merci
highlight('cordoba', $chaîne). j'aimerai que ma regex considère cordoba et Córdoba comme une même chaîne.
Merci