Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Javascript invia XML a PHP

    Sto riscontrando un problemino. Voglio construire una stringa XML da inviare ad una pagina PHP attrverso un POST AJAX. Il codice che sto usando è il seguente:

    http.open("POST", "ajaxsaver.php", true);
    http.onreadystatechange = handleXmlResponse;
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    http.send("xmldata=" + string);

    Questo XML poi deve essere catturato e gestito dalla pagina PHP nel seguente modo:

    $xmldata = $_POST["xmldata"];
    ...

    Il problema sono i caratteri riservati, ad esempio la "&" mi sta creando dei problemi, in particolare nella stringa

    "xmldata=" + string

    Inoltre, in un tag dell'XML voglio includere del codice HTML, che mi sembra complichi le cose ulteriormente.
    Come fare per inviare dell'XML con campi contenenti caratteri arbitrari ad una pagina PHP senza troppi problemi?
    Un saluto.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Per il problema dei caratteri come la e commerciale puoi usare le funzioni native di php.
    htmlentities e htmlspecialchars.
    http://se2.php.net/manual/it/function.htmlentities.php
    http://se2.php.net/manual/it/functio...ecialchars.php

  3. #3
    Grazie della risposta,
    ho provato ad utilizzare le chiamate PHP suggerite. E' vero che convertono i caratteri speciali, ma il mio problema persiste. Ad esempio, se provo ad inviare la seguente:

    http.send("xmldata=<root><cnt>dolce&gabbana</cnt></root>");

    e raccogliendo la stringa in PHP ed inviandola indietro con una echo:

    $xmldata = $_POST['xmldata'];
    echo htmlentities($xmldata);

    oppure

    $xmldata = $_POST['xmldata'];
    echo htmlspecialchars($xmldata);

    ottengo solo:

    &lt;root&gt;&lt;cnt&gt;dolce

    Quindi suppongo che la & appartenente alla stringa viene interpretata da PHP come la & di separazione argomenti per PHP.
    Sto utilizzando male le funzioni PHP?
    Grazie, un saluto.

  4. #4
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ciao, ho anche io lo stesso problema e posso dirti fin da subito che non è lato server.
    ovvero non sei tu ad utilizare male le funzioni di php perchè la stringa che invii tramite ajax arriva al server gia troncata di tuttala parte successiva alla e commerciale.
    e la cosa si spiega vedendo questo pezzo di funzione (quella che uso io).
    codice:
    		for(var i=0; i<form.elements.length; i++){		
    			if(form.elements[i].type!="radio" && form.elements[i].type!="checkbox"){
    				parametri += form.elements[i].name + "=" + form.elements[i].value + "&";
    			}
    		}
    questa funzione raccoglie il contenuto dei capit testo di un form e lo inserisce in una stringa di parametri che verrà poi inviata al server.
    questa stringa separa i campi del form tra loro usando la "&" proprio come si fa nel GET.
    ed è per questo motivo che i testi contenti la e commerciale arrivano troncati!

    l'unico modo per risolvere la cosa è quello di quotare o cmq trasformare in html entities le stringhe lato client, cioè prima di inviarle al server.

    ora do un occhiata alla reference di javascript per vedere se esiste una funzione adatta e poi nel caso riposto.
    saluti
    citrus

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Spero che nel frattempo l'utente abbia risolto... la discussione e' ormai "datata"

    Per tua info:
    http://forum.html.it/forum/showthrea...readid=1016479

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ehehe si hai ragione... speravo di poter continuare qui la discussione visto che incontro ora lo stesso problema ma forse ero un po' "fuori rotta"...
    infatti ho aperto un thread più specifico che spero possa essere utile anche ad altri...
    spero di non aver creato casini....

    in ogni caso...
    io stavo cercando nella reference javascript del w3school ma nonho trovato la funzoine escape sotto l'oggetto String.. dove si trova? come si usa?
    (poi quando troviamo la soluzione la posto di la così che possa essere utile anche ad altri)
    grazie
    citrus

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non e' un metodo dell'oggetto string ma una funzione nativa... http://www.devguru.com/technologies/...ript/11459.asp

    La discussione puo' proseguire qui... l'altra l'ho chiusa.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    lo scambio dati in ajax si fa bene solo con encodeURIComponent (e non encodeURI) ... escape va bene ma ha tanti problemi quali:

    - encode parziale dei caratteri (non fa escape di alcuni importanti e vengono persi o danno problemi)
    - non fa escape del più '+' ... quindi si perde il più '+' perchè viene visto come uno spazio
    - non supporta i caratteri unicode, li converte in modo "ridicolo" ed utile solo a se stesso


    encodeURIComponent e decodeURIComponent si sposano col servr perchè:
    - sono nativamente UTF8 o unicode compatibili
    - non danno mai problemi di cartatteri, convertono alla perfezione


    encodeURIComponent e decodeURIComponent sono funzioni top-level, non presenti su versioni un pò datate di JavaScript (IE5, Safari 1, altri)

    Per usare senza preoccuparsi di niente queste funzioni indispensabili per ajax (ed altre ancora) basta avere una piccola libreria caricata in cima alla pagina ... quale ? ne ho una in sign (JSL)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.