97

POSTJavaScriptのメソッドでいくつかの変数と文字列を送信したいと考えています。

データベースから文字列を取得し、それを PHP ページに送信します。オブジェクトを使用していXMLHttpRequestます。

問題は、文字列に文字&が数回含まれており$_POST、PHP の配列が複数のキーのように認識していることです。

&を関数に置き換えてみましたが\&replace()何もしないようです。

誰でも助けることができますか?

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>
4

8 に答える 8

178

encodeURIComponent()を使用できます。

URL で逐語的に発生できないすべての文字をエスケープします。

var wysiwyg_clean = encodeURIComponent(wysiwyg);

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

于 2012-07-02T12:58:29.233 に答える
15

encodeURIComponent()を使用したい場合があります。

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B
于 2012-07-02T12:58:02.497 に答える
9

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

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

Wolframが指摘しているように、これはencodeURIComponentによって(他のすべての特殊文字とともに)適切に処理されます。

于 2012-07-02T12:58:18.000 に答える
4

Ramil Amrの答えは、&文字に対してのみ機能します。他に特殊な文字がある場合は、PHPhtmlspecialchars() JSを使用する必要がありますencodeURIComponent()

あなたは書ける:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

そしてサーバー側では:

htmlspecialchars($_POST['wysiwyg']);

これにより、AJAXがデータを期待どおりに渡すようになり、PHP(データをデータベースに挿入する場合)がデータが期待どおりに機能するようになります。

于 2012-07-02T13:08:14.907 に答える
1

推奨される方法は、jQueryなどのJavaScriptライブラリを使用し、データオプションをオブジェクトとして設定してから、次のようにjQueryにエンコードを実行させることです。

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

jQuery(最近はほとんど標準です)を使用できない場合は、encodeURIComponentを使用してください。

于 2012-07-02T13:08:55.580 に答える
1

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

JavaScript (ドキュメント)

var wysiwyg_clean = window.btoa( wysiwyg );

PHP (ドキュメント):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );
于 2012-07-02T12:59:01.850 に答える