JavaScriptからPOSTメソッドを使用して、いくつかの変数と文字列を送信します。データベースから文字列を取得し、PHPページに送信します。 XMLHttpRequestオブジェクトを使用しています。問題は、文字列に文字「&」が数回含まれており、PHPの$ _POST配列が複数のキーのように見えることです。 replace()関数を使用して「&」を「\&」に置き換えようとしましたが、何もしません。誰でも助けることができますか?
JavaScriptコードと文字列は次のようになります。
var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');
var poststr = "act=save";
poststr+="&titlu="+frm.value.titlu;
poststr+="§iune="+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">"Busola"</span>
encodeURIComponent() を使用できます。
URLで逐語的に発生できないすべての文字をエスケープします。
var wysiwyg_clean = encodeURIComponent(wysiwyg);
この例では、アンパサンド文字&
は、URLで有効なエスケープシーケンス%26
に置き換えられます。
encodeURIComponent() を使用することもできます。
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
アンパサンドをURLエスケープする必要があります。つかいます:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Wolframが指摘しているように、これはencodeURIComponentによって(他のすべての特殊文字とともに)うまく処理されます。
Ramil Amrの答えは&文字に対してのみ有効です。他の特殊文字がある場合は、PHPのhtmlspecialchars()
and JSのencodeURIComponent()
を使用する必要があります。
あなたは書ける:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
そしてサーバー側で:
htmlspecialchars($_POST['wysiwyg']);
これにより、AJAXが期待どおりにデータを渡すようになり、PHP(データベースにデータを追加する場合)が期待どおりに機能するようになります。
推奨される方法は、jQueryなどのJavaScriptライブラリを使用して、データオプションをオブジェクトとして設定し、次のようにjQueryにエンコードを行わせることです。
$.ajax({
type: "POST",
url: "/link.json",
data: { value: poststr },
error: function(){ alert('some error occured'); }
});
JQueryを使用できない場合(これは最近の標準です)、 encodeURIComponent を使用します。
encodeURIComponent(Your text here);
これにより、特殊文字が切り捨てられます。
このencodeURIComponent関数を使用して引数を渡すことができるため、特殊文字を渡すことを心配する必要はありません。
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
OR
var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent