回答:
encodeURIComponent()
JSとPHPで使用すると、正しい値を受け取るはずです。
注:またはにアクセスすると$_GET
、すでにデコードされた値が取得されます。$_POST
$_REQUEST
例:
あなたのJSで:
// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
サーバー上:
echo $_GET['string']; // "+"
URLエンコードされたデータを含むのは、未加工のHTTPリクエストのみです。
GETリクエストのためにあなたがからこれを取得することができますURI. $_SERVER['REQUEST_URI']
か$_SERVER['QUERY_STRING']
。URLエンコードされたPOSTの場合、file_get_contents('php://stdin')
注意:
decode()
シングルバイトでエンコードされた文字に対してのみ機能します。UTF-8範囲全体では機能しません。
例えば:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
注:以下"%C4%80"
と同等です。escape('\xc4\x80')
これは、UTF-8 \xc4\x80
で表すバイトシーケンス()ですĀ
。したがってencodeURIComponent()
、サーバー側を使用する場合、サーバー側がUTF-8を受信していることを知っている必要があります。それ以外の場合、PHPはエンコーディングを壊します。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
か<meta charset="UTF-8">
、あなたはまた、コンテンツタイプHTTPヘッダーとPHPでそれを設定することができます。header('Content-Type: text/html;charset=UTF-8');
PS:&rsqo; ブラウザではデコードしません(FF3.5)。
あなたが探している16進数の値は %2B
PHPで自動的に取得するには、を介して文字列を実行しますurlencode($stringVal)
。そして、それを元に戻すurldecode($stringVal)
ためにラフを実行します。
JavaScriptで処理したい場合は、 escape( str )
編集する
@bobinceのコメントの後、私はもっと読みましたが、彼は正しいです。とを使用encodeURIComponent(str)
しdecodeURIComponent(str)
ます。文字を変換しませんエスケープは、だけでそれらをエスケープ\
さん
escape
(またはunescape
)を使用しないでください。これらはURLエンコーディングと同じではなく、+や非ASCIIのUnicode文字では正しく機能しません。encodeURIComponent / decodeURIComponentはたいていの場合あなたが望むものです。
それをもっと面白くして、うまくいけば他の人のために髪を引っ張るのを減らすことができます。Pythonを使用して、curlを使用して構成できるデバイス用の辞書を構築しました。
問題: {"timezone":"+5"} //throws an error " 5"
解決: {"timezone":"%2B"+"5"} //Works
つまり、一言で言えば:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
この投稿に感謝します!
urlencode()
PHPでカールする必要がある場合は、PHPから使用する必要がありますが、個別に使用する必要があります。
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
もし、するなら urlencode(strPOST)
、別の問題が発生します。1つのItem1があり、&は%xx値を変更して1つの値になります。ここで戻り値を確認してください!
例1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
例2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
例1は、curlでPOST用の文字列を準備する良い方法です
例2は、両方の値を区別するために、受容体が等号とアンパサンドを認識しないことを示しています。
私の問題は、javascriptの「コード例」をmysqlに保存しようとしたときのアクセント(áÉñ)とプラス記号(+)に関するものでした。
私の解決策(より良い方法ではありませんが、うまくいきます):
javascript:
function replaceAll( text, busca, reemplaza ){
while (text.toString().indexOf(busca) != -1)
text = text.toString().replace(busca,reemplaza);return text;
}
function cleanCode(cod){
code = replaceAll(cod , "|", "{1}" ); // error | palos de explode en java
code = replaceAll(code, "+", "{0}" ); // error con los signos mas
return code;
}
保存する関数:
function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();
var result = null;
$.ajax({
datatype : "html",
data: myData,
url: url,
success : function(result) {
alert(result); // result ok
},
});
} // end function
PHPの関数:
<?php
function save($pid,$code){
$code= preg_replace("[\{1\}]","|",$code);
$code= preg_replace("[\{0\}]","+",$code);
mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>