OVH Community, votre nouvel espace communautaire.

curieux effet des accents avec preg_replace


Daniel60
06/02/2011, 15h03
Voir aussi du côté de mb_convert_encoding

Christophe_S
06/02/2011, 14h24
Je pense qu'il y a un bug dans les fonctions de conversion de caractères de PHP notamment preg_replace qui ne fonctionne pas si le dernier caractère est accentué. Je l'ai lu dans le manuel PHP en ligne, mais impossible de retrouver le lien. En ajoutant un caractère à la fin de la chaine, le bug disparait.


Christophe S

jacquou
04/02/2011, 16h11
J'ai trouvé une solution, pas trés propre certe, mais ça marche:

il suffit de d'enlever les accents avant le preg_replace() et de les remettre aprés, c'est tout simple :-)

allez zou

jacquou
29/01/2011, 19h34
Bonsoir

Il s'agit juste du texte des liens: la partie cliquable qui pose probleme quand il se termine ou commence par un caractère accentué.

Le texte complet du paragraphe est dans la table: texte, avec ses accents.

Le texte des liens (le texte cliquable) se trouve dans la table: liens, avec ses accents

Le texte complet du paragraphe avec le code html des liens doit se placer dans la table: contenu, avec ses accents, ça marche trés bien avec wamp en local mais pas chez ovh.
Je ne cherche pas a supprimer les accents au contraire je veux les garder

Plus j'y réfléchie plus je me dis qu'il suffirai de modifier la REGEX afin qu'elle accepte des caractères accentués en fin ou début de mot, mais je n'y connais rien en regex.
Ou bien indiquer a la fontion preg_replace qu'elle a afaire a des caractères accentué, mais la aussi je sais pas comment faire.

Merci de vos conseils

Mathieu

Gaston_Phone
29/01/2011, 16h55
Oui mais s'il a enregistré des liens avec accents, d'où les sort-il ?

FoXy602
29/01/2011, 16h26
D'après ce que j'ai compris, il récupérer dans sa base de données les liens (qui comporte un ou plusieurs accent) pour les utiliser dans des liens HTML sauf qu'un nom de fichier ne peux pas contenir d'accents d'où le remplacement des accents.

Gaston_Phone
29/01/2011, 15h52
Je n'ai pas très bien compris ce que tu souhaitais faire.

Mais voici un exemple de passage de caractères accentués aux caractères sans accents :

Code PHP:
   // Passage de caractères accentués aux caractères sans accents

   
$peciaux = array( 'À''Á''Â''Ã''Ä''Å''Æ''à''á''â''ã''ä''å''æ''È''É''Ê''Ë''è''é''ê''ë''Ì''Í''Î''Ï''ì''í''î''ï''Ò''Ó''Ô''Õ''Ö''Ø''ò''ó''ô''õ''ö''ø''Ù''Ú''Û''Ü''ù''ú''û''ü''ß''Ç''ç''Ð''ð''Ñ''ñ''Þ''þ''Ý' );
   
$normaux = array( 'A''A''A''A''A''A''A''a''a''a''a''a''a''a''E''E''E''E''e''e''e''e''I''I''I''I''i''i''i''i''O''O''O''O''O''O''o''o''o''o''o''o''U''U''U''U''u''u''u''u''B''C''c''D''d''N''n''P''p''Y' ); 
   
$string  str_replace ($peciaux$normaux$string); 

jacquou
29/01/2011, 13h17
Citation Envoyé par Daniel60
Cela se situe probablement au niveau de charte de caractères d'interclassement de la base de donnée.
Merci Daniel
Je ne voudrais pas trop modifier ma base de donnée ça fonctionne bien avec tous les scripts jusque la et je n'y connais pas grand chose :-(

Il existe peutêtre un moyen au niveau du codage des tables ou de ce script ou dans la déclaration de charset des pages de script ou d'affichage.

Je vais continuer de chercher
Mathieu

Daniel60
29/01/2011, 11h31
Cela se situe probablement au niveau de charte de caractères d'interclassement de la base de donnée.

jacquou
29/01/2011, 11h11
Bonjour à tous

Je suis confronté a un probleme pour moi qui suis loin d'être un expert en php
Voila, jai
une table texte qui contient, entre autre, du texte dans une colonne de type TEXT
une table liens qui contient des mots ou groupes de mot dans une colonne de type TEXT
et une table contenu qui contient le texte aprés qu'il soit passé par preg_replace

ça marche trés bien pour tous les mots sauf s'ils se termine ou commence par une lettre accentuée, par exemple
le mot: "confronté" ne sera pas transformé en lien alors que mot: "confrontés" le sera !!
Ce phénomène se produit sur mon hébergement mutualisé chez OVH, par contre chez moi avec WAMP sur windows il n'y a pas ce probleme

Les pages de mon site ont toute cette ligne: header('Content-Type: text/html; charset=iso-8859-1'); je sais pas s'il ya un rapport

les tables ont été créé avec la config par défaut sur phpmyadmin ovh

voici le code concerné:

$reqtxt = "SELECT *FROM texte WHERE (num='$_POST[numquoi]')";
$restxt = mysql_db_query($nombase, $reqtxt, $lien);
$ligtxt = mysql_fetch_array($restxt);
$letexte = $ligtxt['corps'];

$reqliens = "SELECT *FROM liens WHERE (numelem='$_POST[elem]')";
$resliens = mysql_db_query($nombase, $reqliens, $lien);
while ($ligliens = mysql_fetch_array($resliens))
{
$textedulien = $ligliens['textelien'];
$remplacement = " $textedulien ";
$letexte = preg_replace('#\b' . $textedulien. '\b#i', $remplacement, $letexte);
}

$contenu = mysql_real_escape_string($letexte);
$requete = "UPDATE $tablecontenu SET cont='$contenu' WHERE (num='$_POST[numelem]')";

Si vous avez une idée, merci d'avance :-)

Mathieu