remplacer caractère

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 09:32

Bonjour,

Je voudrais remplacer tous les caractères "é" par "é" dans ma bdd. Y a til une instruction sql qui permet de faire ça en 1 fois sur tout le contenu de la bdd?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

30 mars 2007, 09:46

Pas vraiment, mais il existe une fonction qui permet d'effectuer des remplacement. Regarde dans le manuel de MySQL dans les fonctions de chaînes, ça doit ressembler à

Code : Tout sélectionner

UPDATE matable SET champ = REPLACE(champ, 'é', 'é')

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 mars 2007, 10:02

La base de données ne devrait pas contenir de données encodées, seulement des données brutes, c'est à dire avec accents.

J'imagine que le but de cette opération est d'avoir des données prêtes à l'affichage, non ? Imagine que tu veuilles désormais les enregistrer dans un fichier, cet encodage va te poser des soucis.

Le remplacement des caractères spéciaux est de l'ordre de l'affichage, pas de la mémorisation. ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 18:20

ben mon pb est que lorsque j'insère du contenu brut, les caractères spéciaux deviennent illisibles, commme
"é" pour "é",
"ê" pour "ê",
"ï" pour "Ï",...

Ce que je ne comprends pas, c'est que ma version du site en local n'a pas ce pb. Pourtant pour la mise en ligne, je fais un transfert par copier/coller du sql, d'une bdd à l'autre.

Encore plus étrange, quand je suis sur hotmail, mes caractères spéciaux sont illisibles de la même manière.

Je sais pas d'ou vien ce pb de bdd mais ça m'est arrivé juste avant une présentation de site et j'ai du me taper tous les caractères à la mano. Arrgh.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

30 mars 2007, 18:33

Codage de caractères. Ton "é" c'est un "é" encodé en UTF-8 mais visualisé en ISO-8859-1 (ou assimilé). Si tu déclares le bon codage dans la page web tes problèmes disparaissent. Pareil pour MySQL, il faut lui préciser quel codage tu utilises, sinon tu as ce genre de problèmes. Je n'ai pas de lien sous la main, si quelqu'un a quelque chose qu'il se dénonce.

Pour résumer, dans la page HTML

Code : Tout sélectionner

meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
ET/OU en PHP (y'a même une option dans php.ini)
header('Content-Type: text/html;charset=utf-8');
Et dans my.ini,

Code : Tout sélectionner

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8
Félicitations, maintenant tout ton système est en UTF-8. Mauvaise nouvelle, strtolower(), substr() et d'autres fonctions ne fonctionneront plus correctement...* voir mb_substr() ou iconv_substr() pour plus d'infos.

* jusqu'à ce que tu upgrades vers PHP 6 l'année prochaine

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 19:30

super, ça marche bien. Tu viens de m'enlever un poteau de l'orteil. Et que dois-je utiliser comme fonction de traitement pour importer du code et html et des caractères comme { } dans une bdd mysql?

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 19:33

j'ai tenté addslashes() qui me renvoie des erreurs de syntaxe. C'est tout le contenu d'une bdd joomla que j'essaye d'importer en une fois.

ça marchait bien en local, mais pas moyen d'exporter. Pourtant c'est une exportation zippée de ma bdd, j'y ai pas touché.

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 19:37

voici l'essentiel de l'erreur:
Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

ERROR: Ponctuation invalide @ 1
STR: \\
SQL: \\r\\n\', 1, 0, \'0000-00-00 00:00:00\', NULL, 6, 0, 0, \'\'); INSERT INTO `jos_categories` (`id`, `parent_id`, ....................

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\\r\\n\', 1, 0, \'0000-00-00 00:00:00\', NULL, 6, 0, 0, \'\');
Ce que vous voyez ci dessus est passé dans un stripslashes(), qui ne marche pas mieux qu'addslashes().

Eléphant du PHP | 170 Messages

30 mars 2007, 20:47

Le remplacement des caractères spéciaux est de l'ordre de l'affichage, pas de la mémorisation. ;)
Je plussoies cette remarque remplie de bon sens !
Cette remarque qui devrait être affichée partout comme règle générale sur tous les sites traitant de Php/Mysql
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Invité
Invité n'ayant pas de compte PHPfrance

30 mars 2007, 22:39

dans mon message d'erreur, mysql tente de localiser le passage qui gêne. Je remarque que les clauses INSERT INTO et VALUES de ma requête sont en gras, pas de pb.

Mais dans mon contenu, il y a du texte en anglais, contenant le mot "to".
Il est formaté comme les deux instructions citées précédemment.
Se pourrait-il que mysql considère ce mot comme une instruction, alors que c'est juste du texte?

Invité
Invité n'ayant pas de compte PHPfrance

31 mars 2007, 00:04

Bon je confirme, il n'ya que les requetes contenant du html qui buggent.
Comment dois-je traiter du html brut avant de l'insérer dans mysql?

Invité
Invité n'ayant pas de compte PHPfrance

31 mars 2007, 01:24

et quand j'affiche mon fichier .sql avec php, j'ai ceci
CREATE TABLE `jos_content` (\n `id` int(11) unsigned NOT NULL auto_increment,\n `title` varchar(100) NOT NULL default \'\',\n `
On voit des \n en plein milieu de la requete. Pourtant cette requete vient directement d'un export phpmyadmin zippé, g pas touché.

J'ai vraiment besoin d'aide, déjà 8 heures que j'appuie sur enter en testant toutes les fonctions imaginables:
addslashes, stripslashes, mysql_escape_string, mysql_real_escape_string, nl2br...sans compter les combinaisons imbriquées de toutes ces fonctions.

ça devrait pas être tout simple de passer d'une bdd à l'autre, surout si c'est la même vesoin de mysql en ligne et en local?

Invité
Invité n'ayant pas de compte PHPfrance

31 mars 2007, 01:28

je précise que toutes les requetes fonctionnent sauf celles qui contiennent du html...

Invité
Invité n'ayant pas de compte PHPfrance

31 mars 2007, 01:44

comment un éditeur wysiwyg fait pour enregistrer du html dans une bdd?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

31 mars 2007, 09:31

Normalement c'est mysql_real_escape_string() que l'on doit utiliser (et par "normalement" je veux dire "absolument tout le temps") mais quelque chose me dit que tu utilises une surcouche pour communiquer avec la base de données. Montre les 5 lignes de PHP qui génèrent/exécutent la requête pour voir ?