Signe + invisible

_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011 - 25 avril 2008 à 21:02
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011 - 28 avril 2008 à 22:39
Bonjour à tous,

J'ai un pb bizarre : j'ai programmé un chat sur mon site (www.sapbm.com) avec PHP, MySQL et Javascript (Ajax)
Tout va bien, sauf UNE chose : le signe "+" n'apparait pas ! Tous les autres caractères apparaissent, même ceux un peu critiques comme les guillemets, slashs etc. mais pas le signe +
L'erreur semble venir de php ou mysql car j'ai testé la valeur retournée par javascript : on voit bien le signe + , par contre il n'y a rien qui s'inscrit dans la base !
Quelqu'un est-il au courant des signes + qui s'évanouissent dans la nature ?

_JMB

24 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
25 avril 2008 à 21:54
Hello,

au niveau des urls, le + peut être considéré comme un espace (ne me demande pas selon quelle norme...).
Après il faudrait voir avec ton code, je ne sais pas à quel moment exactement il passe à la trappe.

à+
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 00:16
Merci pour ta réponse
J'ai mis un alert() juste après l'envoi de l'objet XMLHttpRequest : pas de pb le signe + est encore là.
Par contre c'est dans le traitement de la page php, quand j'envoie la fonction machin("truc.php") que ça coince...
j'ai essayé de mettre un replace($string, '+', 'plus') mais ça me remplace tous les caractères ! j'ai l'impression que le + est traité comme un caractère générique... bizarre... php.ini peut-être ?

_JMB
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 avril 2008 à 00:33
Salut,

Il n'y a rien dans le php.ini qui concerne le caractère +. Ni aucun autre caractère d'ailleurs.

Comme il faut être inscrit pour utiliser le chat, est-ce que tu pourrais montrer un peu ton code qu'on voie où le caractère + se trouve (enfin la variable qui le contient) et comment c'est affiché tout ça ? Là, c'est pas évident de voir où peut être le problème...

Sinon, concernant str_replace() : tu ne mets pas les arguments dans le bon ordre...
http://fr.php.net/str_replace

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 avril 2008 à 00:34
Essaie la fonction javascript encodeURIComponent( ) sur tes données avant de les envoyer par ajax. Autrement, les envoyer par la méthode POST devrait aussi régler le problème.
à+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
26 avril 2008 à 03:02
Salut,

Sans être inscrit on peut tout de même voir le code:
Voici un extrait qui vient de poster_chat.js:
xhr_object.open("POST", url, true);
xhr_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
txt =document.getElementById('message');
xhr_object.send("textemessage="+escape(txt.value));

Tu envois tes données en post urlencoded, donc Evangun à vu juste quand il disait que le + était remplacer par un espace.
La fonction encodeURIComponent peut rêgler ton problème, sinon un replace aussi (mais préfère la fonction, puisqu'elle va remplacer tous les chars)

txt = txt.replace('+','%2B');
ou
txt = encodeURIComponent(txt);

Juste avant d'envoyer les données avec ton objet xhr

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 08:46
Merci à tous pour vos réponses
yoman64 : j'ai essayé mais on me renvoie littéralement "%2B" à la place de "+" !
En fait le pb ne vient pas de javascript mais de PHP !
C'est PHP qui fait des siennes, j'ai ajouté une ligne après le traitement du message posté avec Ajax :
$textemessage = $_POST["textemessage"];
$textemessage = str_replace($textemessage, "+", chr(43));
Et là, je vois bien le + mais il n'y a que ça ! Si je tapes par ex "azerty" il me renvoie "+"
C'est comme si c'était un caractère générique style "%" en SQL...
_JMB
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 avril 2008 à 08:54
str_replace() : ATTENTION A L'ORDRE DES PARAMETRES !!!!!!!
Je te l'ai déjà dit ! Lis la doc, quoi...

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 avril 2008 à 10:19
Hello,

je vais me permettre quelques remarques, _JMB :
tout d'abord, ce ne sont ni javascript ni php qui font des leurs, c'est ton code. A moins qu'ils t'en veuillent personnellement, ce dont je doute... ;-) Bref : ne te braque pas sur un bug bizarre de php ou de javascript. Cherche la bêtise que tu as faite parce que le problème vient forcément de là.
Ensuite, en 2 minutes, j'ai pris connaissance de ton post et des messages postés, et je suis allé voir ton site (j'y suis tjrs là), et déjà, plusieurs choses me sautent aux yeux.
Lis correctement les documentations, car de toute évidence tu ne le fais pas correctement : tu utilises mal str_replace() pourtant très bien documentée, tu n'as pas lu, ou de travers, Neige qui t'a averti  sur cette mauvaise utilisation. Et idem pour Ajax. Le 1er truc qui m'a sauté ux yeux sur ton sdite c'est que tu utilises curieusement Ajax; la page d'accueil de ton chat est soumise à Ajax sans arrêt, même quand on ne fait rien.
Enfin, je pense que tu devrais montrer un peu plus de code : que fait PHP dans l'histoire du message posté sur ton chat ?
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:15
neigedhiver : Tu es sûr que tu ne confonds pas avec ereg_replace ? parce que dans ereg_replace on met la chaine en dernier et dans str_replace en premier ! donc je ne vois pas ce qui cloche...
malalam : j'utilise la fonction setInterval pour faire marcher mon chat. Donc forcément, toutes les secondes la div est rafraîchie avec les données de ma base pour afficher les posts. Je reconnais que c'est artisanal : même quand on ne poste rien la div est rafraichie quand même ! Mais pourquoi diantre seul le signe + n'apparait pas ? Cela dit c'est pas très grave, sauf pour dire "a+"...
J'ai une fonction poster_chat("bidule.php") qui envoie chaque message dans la BD avec du code PHP et une autre afficher_chat("machin.php") qui affiche dans une div les 15 derniers messages. C'est cette fonction qui est encapsulée dans un setInterval paramétré à 1000 millisecondes...
ça te parait loufoque ?

_JMB
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:18
Ouais autant pour moi j'ai mal lu, mille excuses neige

_JMB
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 avril 2008 à 11:24
@_JMB : ok, je comprends le but de ton setinterval. Mais tu le fais même quand on est pas identifié (parce que je ne l'étais pas :! et je ne me suis pas identifié parce que tu veux une vraie adresse email ;-) alors je ne l'ai pas fait. D'ailleurs, petite remarque pour amliorer ton site : il est très difficile de s'inscrire! Il faut déjà trouver le forum, qui n'est pas en lien partout...une page inscription accessible partout eut été la bienvenue).
Dans la BDD, as-tu ce signe + ?
Si non, montre comment tu mets le message dans ta bdd. Mais auparavant, affiche ce que tu insères dans la BDD, et si le signe + n'y est pas, montre ce que tu fais entre le retour d'ajax et ton insertion en base. Ceci dit, je ne sais pas si tu as bien compris le message de Yoman : le + est remplacé par un espace. uriEncode en javascript évite celà. Mais ensuite, en php, tu dois décoder...sinon il est normal que tu aies %truc, qui est la version encodée de +.
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:34
pour mettre le message dans la bdd :

if ($textemessage<>'')  {
$query = "INSERT into chat (pseudo, message, timestamp) values ('".$user."', '".$textemessage."', ".time().")";
$result = mysql_query($query) or die ('Erreur dans la requête : $query. ' . mysql_error());

Pas de signe + dans la bdd (champ vide) pourtant il y a un enregistrement en plus
champ message paramétré à Null=non
caractères : latin_swedish_ci

_JMB
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:36
ça marche pas non plus avec utf_unicode

_JMB
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:38
pour la manip du texte message (après l'envoi avec ajax) :
$textemessage = $_POST['textemessage'];
$textemessage = substr($textemessage, 0, 500);


if (get_magic_quotes_gpc()===0) {
$textemessage = addslashes($textemessage);
}
$textemessage = wordwrap($textemessage);


$textemessage = htmlspecialchars($textemessage);

_JMB
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 avril 2008 à 11:40
Juste après le retour d'Ajax, as-tu ce signe + ? Tu as quoi? AVEC le code de Yoman ?
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 11:44
j'ai essayé en ajoutant des barres de commentaires un peu partout... en vain...


Sinon mon header est (dans la page php) :


header("Content-type: text/html; charset=iso-8859-1");

_JMB
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 avril 2008 à 11:48
Le type de charset de ta page n'a aucun rapport là-dedans.
En utilisant le code de Yoman, puisque tu ne veux pas répondre ;-) si tu fais un urldecode() du retour d'Ajax, ça donne quoi...?
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 12:06
excuse je ne vois pas le haut du topic c'était quoi le code de yoman ?

_JMB
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 avril 2008 à 12:10
uriEncode() pour javascript.
0
_JMB Messages postés 19 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 26 mai 2011
26 avril 2008 à 12:13
ça na marche plus avec uriEncode, le message n'est même plus validé...

_JMB
0
Rejoignez-nous