Discussion:
caractere invisible
(trop ancien pour répondre)
Newsgroups
2009-06-07 21:51:06 UTC
Permalink
Bonjour,

Je galère sur une requete SqLite qui ne fonctionne pas. En fait, je
crois avoir détecté la source du problème :
En fait, je génére ma requete par un code php comme ceci :
$q = 'INSERT INTO %susers ( uid, nom, prenom, email, login, password,
lang, subscription_date, updated_date, persistent ) VALUES ("%s", "%s",
"%s", "%s", "%s", "%s", "%s", "%s", "%s", "0")';
$query = sprintf(
$q,
mysql_real_escape_string($db_prefix),
md5(mysql_real_escape_string(time())),
mysql_real_escape_string($datas['nom']),
mysql_real_escape_string($datas['prenom']),
mysql_real_escape_string($datas['email']),
mysql_real_escape_string($datas['login']),
md5(mysql_real_escape_string($datas['password'])),
mysql_real_escape_string($datas['lang']),
mysql_real_escape_string(time()),
mysql_real_escape_string(time())
);

Le résultat est ceci : INSERT INTO al_users ( uid, nom, prenom, email,
login, password, lang, subscription_date, updated_date, persistent )
VALUES ("1945e0cc88a354a6125bf683de1720f5", "aaa", "aaa",
"***@domain.invalid", "ma", "ffc61156e2ec3cf32ee4a2d800f38ef9", "fr",
"1244393409", "1244393409", "0")

Sauf qu'à la fin de cette requête, il y à un caractère invisible qui
s'ajoute.
Dans vim, je le vois ainsi : "<feff>" (sans les guillemets)

Ca vient de quoi ? de l'encodage de mon fichier ? de sprintf ?
Olivier Miakinen
2009-06-07 22:55:14 UTC
Permalink
Post by Newsgroups
[...]
Le résultat est ceci : INSERT INTO al_users ( uid, nom, prenom, email,
login, password, lang, subscription_date, updated_date, persistent )
VALUES ("1945e0cc88a354a6125bf683de1720f5", "aaa", "aaa",
"1244393409", "1244393409", "0")
^
Pour info, sache qu'il y a ici dans ton article la séquence de trois
octets EF BB BF, laquelle code en UTF-8 le caractère de taille nulle
U+FEFF, « zero-width no-break space », aussi appelé BOM (Byte Order
Mark).
Post by Newsgroups
Sauf qu'à la fin de cette requête, il y à un caractère invisible qui
s'ajoute.
Dans vim, je le vois ainsi : "<feff>" (sans les guillemets)
Oui, c'est exactement la même chose.
Post by Newsgroups
Ca vient de quoi ? de l'encodage de mon fichier ? de sprintf ?
Est-ce que tu as essayé de visualiser ton code PHP avec vim ?
Ta définition de $q ne se terminerait-elle pas par « "0")<feff>'; »
au lieu de « "0")'; »

Cordialement,
--
Olivier Miakinen
Newsgroups
2009-06-09 20:19:05 UTC
Permalink
Post by Olivier Miakinen
Est-ce que tu as essayé de visualiser ton code PHP avec vim ?
Ta définition de $q ne se terminerait-elle pas par « "0")<feff>'; »
au lieu de « "0")'; »
J'ai ouvert avec vim mon fichier php ; j'avais juste des sauts de lignes
genre : "^M"
J'ai tout supprimé par des sauts de lignes "normaux".
Mais pas de <feff>

Par contre, ca ne résoud pas le problème ; ma requete ne fonctionne pas.
Voici la ligne exact copié-collée depuis le php :
$q = 'INSERT INTO %susers ( uid, nom, prenom, email, login, password,
lang, subscription_date, updated_date, persistent ) VALUES ("%s", "%s",
"%s", "%s", "%s", "%s", "%s", "%s", "%s", "0")';

et si je fais un print $q, alors j'obtient ceci :
INSERT INTO bee_users ( uid, nom, prenom, email, login, password, lang,
subscription_date, updated_date, persistent ) VALUES
("eb6b426af245c51da3f3f355b1d81970", "nom", "prenom", "***@free.fr",
"login4444", "1a1dc91c907325c69271ddf0c944bc72", "fr", "1244483828",
"1244483828", "0")<html>... ... ...

Donc l'espace est inséré au moment du print


PHP 5.2.4-2ubuntu5.6 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 17
2009 14:31:37)
Server version: Apache/2.2.8 (Ubuntu)
Les scripts sont édités majoritairement avec "bluefish 1.0.7 HTML
editor" ; mais il est possible qu'un jour ils aient été édités via MS
Win+un logiciel quelconque.

PS : j'ai déjà eut le pbm du BOM qui est effectivement similaire ; sauf
que cette fois-ci, le caractère est au milieu d'une ligne.
Olivier Miakinen
2009-06-09 21:45:56 UTC
Permalink
Post by Newsgroups
Par contre, ca ne résoud pas le problème ; ma requete ne fonctionne pas.
$q = 'INSERT INTO %susers ( uid, nom, prenom, email, login, password,
lang, subscription_date, updated_date, persistent ) VALUES ("%s", "%s",
"%s", "%s", "%s", "%s", "%s", "%s", "%s", "0")';
INSERT INTO bee_users ( uid, nom, prenom, email, login, password, lang,
subscription_date, updated_date, persistent ) VALUES
"login4444", "1a1dc91c907325c69271ddf0c944bc72", "fr", "1244483828",
"1244483828", "0")<html>... ... ...
Donc l'espace est inséré au moment du print
Et le <html> il vient d'où ??? À mon humble avis, les deux doivent
provenir du même fichier.
--
Olivier Miakinen
Loading...