str_replace et accents

WRInaute discret
Salut,

Je bloque.

Le problème a pourtant l'air facile

De ma base de donnée, je récupère un article complet. Je souhaites remplacer le mot électrique par<a href="http://www.coucou.comm">coucouc</a>

Avec str_replace, preg_replace, rien ne marche.

Par contre je remplace facilement les mots sans accents.
Mon code arrive de ma bdd déja sous forme é et non &acute;

Je bloque... :?
 
WRInaute accro
encodage ... :wink: tu aurais pas un souci d'encodage différent entre ton script et le contenu retourné par la base ? les caractères accentués sont peut être aussi stockés avec leur correspondance HTML ...
 
WRInaute accro
kikifrance a dit:
Mon code arrive de ma bdd déja sous forme é et non &acute;
Méa coulpa j'avais pas vue la piste html est donc a écarter mais il reste les soucis classiques utf / iso etc ...
 
WRInaute accro
+1 pour les soucis d'encodage, str_replace() est safe pour l'UTF8 mais il faut le même encodage de la chaîne et du texte à remplacer.
 
Nouveau WRInaute
Bonjour,

Es-tu sûr de ce que tu récupères de ta base de données?
As-tu fais un test sans la base de données?
Et enfin comme dit ci-dessus, peut-être as-tu un problème d'encodage dans ton fichier.
Sinon : Exemple de http://php.net/manual/fr/function.preg-replace.php

<?php
$string = 'Le renard marron agile saute par dessus le chien paresseux.';
$patterns = array();
$patterns[0] = '/agile/';
$patterns[1] = '/marron/';
$patterns[2] = '/renard/';
$replacements = array();
$replacements[2] = 'grizzly';
$replacements[1] = 'brun';
$replacements[0] = 'lent';
echo preg_replace($patterns, $replacements, $string);
?>

L'exemple ci-dessus va afficher :
Le grizzly brun lent saute par dessus le chien paresseux.
 
WRInaute discret
Merci à tous, vous m'avez nettement mis sur la piste.

Débriefing:

Avec mb_detect_encoding, je me suis rendu à l'évidence qui était déja évidente avant, que j'avais effectivement un problème d'encodage. La fonction après plusieurs tests reconnaissait un encodage différent entre mes chaines (ASCII <=>UTF-8)

Donc après de nombreuses tentatives, j'en arrive au code fonctionnel suivant. Valable si votre bdd renvoie des chaines encodées en UTF-8

Code:
$bodytext = $article->bodytext(); //mon texte de la base

$arc=utf8_encode("arc électrique");
$origine=array($arc);

$apresreplace=array("<a href=\"http://www....">$arc</a>");

$bodytext = str_replace($origine, $apresreplace, $bodytext);

Mon erreur était d'encoder avec le array... :roll:

Le premier qui se moque à mon utf8 dans la figure :evil: :mrgreen:
 
Discussions similaires
Haut