Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

caractere invisible

3 réponses
Avatar
Newsgroups
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",
"email@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 ?

3 réponses

Avatar
Olivier Miakinen
Le 07/06/2009 23:51, Newsgroups a écrit :

[...]

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",
"", "ma", "ffc61156e2ec3cf32ee4a2d800f38ef9", "fr",
"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).

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.

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
Avatar
Newsgroups
> 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", "",
"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.
Avatar
Olivier Miakinen
Le 09/06/2009 22:19, Newsgroups a écrit :

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", "",
"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