2011-03-29 5 views
0

J'utilise un script bash pour courber un fichier XMLRPC.
Cependant, le fichier XML que je vous envoie ne contient souvent des variables bash et d'autres caractères parasites (et/ou variables) comme ", ', $, $HOME etc.comment encoder des données pour que Bash n'interfère pas avec le contenu (script bash utilisant PHP)

Je ne suis pas sûr de ce que tous les caractères n'interfèrent ici ou si ceci est lié à autre chose.

Quand je lance un XML très minime dans le même script, je reçois les résultats escomptés, mais un fichier XML avec les caractères ci-dessus (ou variables) me donne: parse error. not well formed

Toute aide est vraiment apprécié ici!

Cordialement
Nikhil Gupta

CODE AJOUTÉE:

curl -k -H "Content-Type: application/xml" -X POST --data-urlencode "${XML}" $URL/xmlrpc.php 

data1=$(php -r "echo htmlentities('$data1',ENT_QUOTES,'UTF-8');") 
data2=$(php -r "echo htmlentities('$data2',ENT_QUOTES,'UTF-8');") 

XML $ est XML qui utilise des variables data1 et data2, qui contiennent les caractères problématiques, par exemple le code XML suivant donne une erreur:

<?xml version='1.0' encoding='iso-8859-1'?> 
<methodCall> 
<methodName>get.usage</methodName> 
<params> 
<param> 
<struct> 
<member> <name>script</name> <value> <string>#!/bin/bash echo $HOME;</string> </value> </member> 
</struct> 
</param> 
</params> 
</methodCall> 
+0

Informations insuffisantes. Comment s'intègre PHP, comment appelez-vous curl, etc.? Poster au moins le code clé. –

+0

a ajouté le code .. pouvez-vous jeter un oeil maintenant? – Stoic

Répondre

0

trouvé la raison .. désolé de déranger tout le monde ici .. (en particulier Matthew Flaschen.)

D'une certaine façon, tout en testant différentes configurations, je fixe sur: --data-urlencode alors --data-binary est ce curl besoin.

1

Utilisez un fichier plutôt que de transmettre le fichier XML sur la ligne de commande. Cela vous aidera à éviter les problèmes d'échappement:

curl -k -H "Content-Type: application/xml" -X POST --data-urlencode @xml_filename $URL/xmlrpc.php 

Vous devez d'abord écrire dans ce fichier. Vous pouvez utiliser tempnam si vous voulez un nom temporaire.

+0

ne fonctionne pas .. J'ai utilisé exactement ce qui précède .. testé le xml enregistré dans ce fichier temporaire avec des validateurs xml en ligne et aime .. mais tout semble être bon .. sauf que .. je trouve juste que la variable '$ HOME' toujours dans ce tempfile .. qui ne laisse pas fonctionner bash avec ce simple fichier correctement, à mon avis ... j'ai testé avec un tempfile et directement sur la ligne de commande pour le même script sans le '$' et ça a marché. – Stoic