Des ennuis avec une regex ou bien utf-8

Petit nouveau ! | 3 Messages

08 janv. 2012, 19:17

Bonjour
Je demande votre aide pour résoudre un probleme dont je ne connais pas l'origine:

J'ai un code qui fonctionne bien en local (win xp) avec wamp ou easyphp, le voici:
<?php
header('Content-Type: text/html; charset=UTF-8');

if (isset($_POST['lemot']) && !empty($_POST['lemot']))
{
include "conectbdd.php";

      $reqaj = "UPDATE liens SET lelien='" . mysql_real_escape_string($_POST[lemot]) . "' WHERE (num='1')";
      if (mysql_query ($reqaj, $lien))
      {          		
      $reqtxt = "SELECT *FROM texte WHERE (num='1')";
      $restxt =  mysql_query($reqtxt, $lien);
      $ligtxt = mysql_fetch_assoc($restxt);           
      $letexte  = $ligtxt['letexte'];

      $reqliens = "SELECT *FROM liens WHERE (num='1')";
      $resliens =  mysql_query($reqliens, $lien);
      $ligliens = mysql_fetch_assoc($resliens);
      $textedulien = $ligliens['lelien'];

      $remplacement = " <a href=\"www.unsite.org\" target=\"_blank\">$textedulien</a> ";
      $nouvtexte = preg_replace("#\b" . $textedulien. "\b#iu", $remplacement, $letexte); 
    
            $requete = "UPDATE contenu SET lecont='" . mysql_real_escape_string($nouvtexte) . "' WHERE (num='1')";
            if (mysql_query ($requete, $lien))
            {
            echo  "Le lien est en place";
            }
            else
            {
            echo  "probleme pour modifier la table contenu !!";
            }
      }
      else
      {
      echo "probleme pour modifier la table liens !!";
      }
mysql_close($lien);
}
else
{
echo "variable vide !!";
}
echo "<a href=\"index.php\">Retour</a>";
?>

Ce code me permet de prendre un mot dans la table: liens puis, s'il existe dans la table texte, de le transformer en lien cliquable et de ranger le nouveau texte dans la table: contenu.
La base de DD est en interclassement utf8_unicode_ci ainsi que les tables
mes scripts et mes page d'affichage sont encodés en UTF-8
Hélas chez mon hébergeur ça ne fonctionne pas avec les mots commencants ou finissants avec une lettre accentué par exemple= égaré ou santé !!
si le mot comporte une lettre accentué a l'intérieur ça fonctionne par exemple= générer!!
La regex ne reconnait pas les mot commençant ou finssants par un caractère spécial !!

Sur mon hébergemt ma base est aussi en utf8_unicode_ci et la version de mysql est aussi la 5

Merci d'avance pour vos suggestions
Mathieu

ViPHP
xTG
ViPHP | 7331 Messages

08 janv. 2012, 23:26

Qu'en est-il de la connexion à mysql ?
Ainsi que du paramètre charset dans le php.ini ? (utilises ini_set si tu n'as pas d'accès à ce fichier)

Petit nouveau ! | 3 Messages

09 janv. 2012, 15:01

Bonjour et merci

Je ne suis qu'un débutant amateur,il me semble qu'il n'y a pas de problèmes de connexion mysql.
Je suis allé voir le texte dans les tables est bien dans ce format bizarre qu'est utf8 les é sont remplacés par des A avec chapeau et un cercle avec un c dedans.
Je ne sais pas me servir de ini_set :-(

Par contre, si cela peut vous donner une indication, j'ai placé dans une autre base en latin_swedish_ci , les même fichiers encodés préalablement en ANSI avec la déclaration de charset en iso-8859-1 et enlevé le u de la regex et le résultat est le même !!!
la regex ne reconnais pas non plus les mots dont la première ou la dernière lettre on un accent !! avec les autres mots ça marche.

Le probleme vient peut être donc de cette regex:
$nouvtexte = preg_replace("#\b" . $textedulien. "\b#i", $remplacement, $letexte);

Merci de m'aider
Mathieu

ViPHP
xTG
ViPHP | 7331 Messages

09 janv. 2012, 16:47

Un généreux membre du forum a rédigé un très intéressant article sur le sujet de l'encodage.
Je t'invite à aller le consulter : faq-tutoriels/encodage-utf-t245062.html ;)

Petit nouveau ! | 3 Messages

10 janv. 2012, 07:48

Bonjour

Je suis allé voir ce tuto trés bien fait je n'ai pas tout compris mais cela m' a permis d'essayer quelques truc comme modifier l'internal encoding de mon script php acec: mb_internal_encoding("UTF-8");

Mais hélas le probleme demeure
Du coup j'ai essayé la même regex dans un script hyper simple sans intervention de mysql
comme ceci:
<?php
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding("UTF-8");

if (isset($_POST['lemot']) && !empty($_POST['lemot']))
{
$lemot = $_POST['lemot']; 

$letexte  = "Un texte avec acçents une ligné une épingle un égaré un désastre un dés";

      $remplacement = " <a href=\"www.unsite.org\" target=\"_blank\">$lemot</a> ";
      $nouvtexte = preg_replace('#\b' .$lemot. '\b#ui', $remplacement, $letexte); 
  
      echo "$nouvtexte";
}
else
{
echo "variable vide !!<br />";
}
echo "<br /><a href=\"index2.php\">Retour</a>";
?>
Et ça ne marche pas non plus !!!
je fais le même en iso-8859-1 et c'est la même chose!!!
le probleme se situe donc au niveau de la regex et des accents

Vais continuer a chercher de ce coter la, si vous connaissez ien les regex merci de m'aider
Mathieu