2012-07-02 7 views
70

JavaScriptからPOSTメソッドでいくつかの変数と文字列を送信したいと思います。私はデータベースから文字列を取得し、それをPHPページに送ります。私はXMLHttpRequestオブジェクトを使用しています。 問題は文字列に「&」という文字が数回含まれていることです。PHPの$ _POST配列は複数のキーのように見えます。 "&"を "\ &"とreplace()関数で置き換えようとしましたが、何もしないようです。 誰も助けることができますか?「&」(アンパサンド)文字をAJAX経由で送信するにはどうすればよいですか?

JavaScriptコードと文字列は次のようになります。

var wysiwyg = dijit.byId("wysiwyg").get("value"); 
var wysiwyg_clean = wysiwyg.replace('&','\&'); 

var poststr = "act=save"; 
poststr+="&titlu="+frm.value.titlu; 
poststr+="&sectiune="+frm.value.sectiune; 
poststr+="&wysiwyg="+wysiwyg_clean; 
poststr+="&id_text="+frm.value.id_text;  
xmlhttp.open("POST","lista_ajax.php",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send(poststr); 

文字列は次のとおりです。

<span class="style2">&quot;Busola&quot;</span> 

答えて

127

encodeURIComponent()を使用できます。これは、URLで逐語的に発生することができないすべての文字エスケープします

:この例では

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

を、アンパサンド文字&は、URLに有効なエスケープシーケンス%26、置き換えられます。

+0

はい、encodeURIComponentはそれを行います!ありがとう! – candino

+0

これはデータを安全にエスケープするのに十分ですか、またはアンパサンドの問題を回避するのに十分なだけですか? – Sprottenwels

+0

@Sprottenwelsでは、すべてのデータを適切にエンコードするだけで十分です。この文脈で「安全に」とはどういう意味ですか? –

15

あなたはencodeURIComponent()を使用する場合があります。

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B 
+0

このコードは動作しています.. thanx bro .. –

7

アンパサンドをURLエスケープする必要があります。使用:

var wysiwyg_clean = wysiwyg.replace('&', '%26'); 

ヴォルフラムが指摘するように、これはうまくencodeURIComponentでで(他のすべての特殊文字と一緒に)処理されます。

0

JavaScript側でBase64エンコーディングを使用して文字列をエンコードし、PHP(?)でサーバー側でデコードすることができます。

のJavaScript(Docu

var wysiwyg_clean = window.btoa(wysiwyg); 

PHP(Docu):

var wysiwyg = base64_decode($_POST['wysiwyg']); 
4

ラミルアムルの答えは唯一&文字のために動作します。その他の特殊文字がある場合は、PHPのhtmlspecialchars() JSのencodeURIComponent()を使用する必要があります。

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

を、サーバー側で:

あなたは書くことができます

htmlspecialchars($_POST['wysiwyg']); 

これは予想通りAJAXはデータを渡すことを確認します、そして場合PHP(つまりyour'eデータをデータベースに埋め込む)、データが期待どおりに機能することを確認します。

1

好ましい方法は、次のように、そのようなjQueryのようJavaScriptライブラリを使用してjQueryのエンコーディングをやらせる、その後、オブジェクトとしてデータオプションを設定することです:(あなたはjQueryのを使用できない場合

$.ajax({ 
    type: "POST", 
    url: "/link.json", 
    data: { value: poststr }, 
    error: function(){ alert('some error occured'); } 
}); 

これはかなり標準的なものです)、encodeURIComponentを使用してください。

関連する問題