Rechercher : dans
Par :

[PHP] Envoi de chaines de caractères spéciaux

Dernière réponse le 10 fév 2009 à 10:33:11 Estydral, le 5 fév 2009 à 14:08:12 
 Signaler ce message aux modérateurs

Bonjour,

Je rencontre un petit problème avec l'envoi d'une chaîne de caractère comportant des caractères spéciaux, tels que le "$" ou le "|".
Existe-t'il une fonction permettant l'envoi de ces derniers?

J'arrive à envoyer tous les autres avec la fonction htmlentities() de php mais ces deux là sont récalcitrants :s


Exemple:

$var = htmlspecialchars('\$!\*³ê³¡÷׿?§1568}]@^\[{#~´´~œœ“Œ');
=>affiche alors \$!\*³ê³¡÷׿?§1568}]@^\[{#~´´~œœ“Œ sans le $! qui est considérée comme une variable

$var = htmlspecialchars('\$!\*³ê³¡÷׿?§1568}]@^\|\[{#~´´~œœ“Œ');
=>affiche seulement \\*3ê3¡÷׿?§1568}]@^\ , jusqu'au pipe qui est alors considéré comme un "ou"...



Si quelqu'un peut m'aider à palier ce problème.. merci!

Configuration: Linux
Mozilla 1.9.0.5

Meilleures réponses pour « [PHP] Envoi de chaines de caractères spéciaux » dans :
Oracle - Echappement de caractères spéciaux VoirPour certaines requêtes SQL, nous avons besoin de rechercher des chaînes de caractères contenant des caractères spéciaux tels que '%' Dans l'exemple suivant, qui est faux, le besoin est de trouver les enregistrements contenant au milieu le...
[CCM] Utiliser des caractères spéciaux VoirVous pouvez utiliser des caractères spéciaux dans vos messages sur les forums de CCM. Vous pouvez: Soit utiliser la table de caractères Windows (charmap.exe) et copier-coller les caractères dans le message. Soit utiliser les entités...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...

1

Estydral, le 9 fév 2009 à 09:35:28

Bonjour,

Personne n'aurait une petite idée? :s

Répondre à Estydral

2

Nep_51, le 9 fév 2009 à 09:52:41

Bonjour,

Moi pour régler le problème de caractère spéciaux, j'ai une petite fonction qui me permet de remplacer des éléments dans une chaine de caractère et une autre fonction qui remplace à nouveau.
Je sais pas si ca va marcher dans ton cas pour les caractères $ et |

Essaye avant d'envoyer de faire:
$mess=str_replace("$","&doll;",$mess);

en ensuite en reception
$mess=str_replace("&doll;","$",$mess);

Pareil pour |.

Dis moi si ca marche ca m'intéresse bien...

Nep
http://cultureg.org
Vous avez des connaissances? Venez les partager

Répondre à Nep_51

3

toto, le 9 fév 2009 à 10:30:08

Bonjour

$var = htmlspecialchars etc... n'a jamais rien affiché. $! ne peut en aucun cas être pris pour une variable dans cette chaîne, pas plus que le pipe ne peut être pris pour un OU.
Peux-tu décrire ce qui se passe vraiment ? Qu'arrive-t-il à tes variables entre l'affectation ($var=..) et le moment où tu les affiches (echo) ?
Tu as peut-être un problème d'encodage : si tu écris ton script en iso-8859-1 et que dans l'en-tête tu dis que c'est de l'UTF-8 (ou l'inverse...) normal que ça affiche n'importe quoi avec htmlspecialchars.

Répondre à toto

4

Estydral, le 9 fév 2009 à 10:34:00

Bonjour,

Au niveau de l'envoi ça a l'air de bien fonctionner, sans le convertir en réception de reçoit "& amp;doll;" (sans espace) à la place de "&doll", ça doit venir de mon codage en utf-8 peut-être.

Je regarde pour la reconversion en réception comme c'est dans un script Python et je te dit ça, merci beaucoup en tous cas!

Répondre à Estydral

5

toto, le 9 fév 2009 à 10:43:01

Je veux bien t'aider, mais il faudrait que tu répondes à mes questions. Le $amp;doll; signifie que tu as appelé deux fois htmlentities sur le caractère $ : la première fois, tu obtiens &doll; la deuxième fois, le & est traduit à son tour et ça devient &doll;.

Répondre à toto

6

Estydral, le 9 fév 2009 à 11:01:49

Bonjour,

Désolé, je n'avais pas vu ta réponse Toto :s

Alors pour ce qui est du codage j'ai déclaré de l'utf-8 dans ma page PHP, pour que ce soit compatible avec mon script Python.

header ( 'content-type: text/html; charset=UTF-8' );

Pour ce qui est de ma variable de caracteres spéciaux,


Partie PHP

function otherChar($mess) {
$mess=str_replace("$","&doll;",$mess);
$mess=str_replace("|","&pipe;",$mess);
return $mess;
}

$var = htmlspecialchars(otherChar('\$!\*³ê³¡÷׿?§1568|}]@^\ \[{#~´´~œœ“Œ'));
setCVAr(array('Test', 'NOM', 'Taylor', 'ééé', 'test@live.fr', $var));
$CVArImplode = addslashes(implode("|", $this->CVAr));

echo `/usr/bin/python affichage_text.py "$CVArImplode" "$ThemeTMPImplode" "$this->nom" "$this->nomTMP"`;



Partie Python

#! /usr/bin/python

# -*- coding: utf-8 -*-


import socket

import uno

import string

import sys #Librairie qui permet de recuperer les variables passees en parametre.

CVArImplode = unicode(sys.argv[1].decode('utf-8'))
CVAr=CVArImplode.split("|")

data={}



#Modification du contenu de la variable ThemeTMP puis insertion des donnees dans le tableau de donnees "data"

for i in range(0,len(ThemeTMP)):

ThemeTMP[i]="[var."+ThemeTMP[i]+"]"

data[ThemeTMP[i]]=CVAr[i]

#Parcours le tableau de donnees "data" et remplace les variables par le contenu desire.

for find,replace in data.items():

findandreplace(document,search,unicode(find),unicode(replace))




Voila les grandes lignes de mon code!
Il permet de remplacer dans un document texte des noms de variables stockées dans un tableau ThemeTMP par le contenu de mon tableau CVAr.

EDIT: Je n'ai pas trop compris le problème de codage que tu proposes, comment est-ce que je pourrais écrire en iso si je déclare mon script en utf-8? Question surement bête mais le codage, c'est pas mon fort :s
Sinon j'ai regardé au niveau de mon serveur, il est configuré en utf-8. ("env" en ligne de commande dans le terminal debian).

Répondre à Estydral

7

toto, le 9 fév 2009 à 19:30:10

Je suis très embêté pour te répondre parce que je ne comprends pas le python et je ne sais pas du tout comment lui il traite les caractères et leur codage.
Mais je suis sûr que le htmlspecialchars(otherChar(... est une erreur. C'est ça qui provoque le & amp;doll; le otherChar transforme le $ en & doll; . le htmlspecialchars transforme le & en & amp; d'où le résultat & amp;doll;
À ta place je n'utiliserais pas du tout otherChar, et j'utiliserais htmlentities au lieu de htmlspecialchars.

Je ne maîtrise pas tout (loin de là) au niveau des codages mais il me semblerait logique que le script doive être écrit en utf-8 lui aussi. Mais il faudrait tout aussi logiquement dire à PHP avec quel encodage on travaille et je ne sais pas comment ça peut se faire.

Répondre à toto

8

Estydral, le 10 fév 2009 à 08:27:36

Bonjour,

D'accord, je vais chercher sur ces pistes alors.
Au pire je ferais simplement un remplacement de chaîne de caractère dans mon script Python pour ré-obtenir le $ et le |, c'est pas un codage "beau" mais bon..

Merci beaucoup pour vos réponses Nep_51 et Toto!

Répondre à Estydral

9

 Estydral, le 10 fév 2009 à 10:33:11

Petit up!

Seul le "$" me pose problème en fait, pour le pipe c'est normal, j'avais oublié que je l'avait utilisé en tant que caractère séparateur dans ma fonction implode...

Répondre à Estydral
Collection CommentÇaMarche.net