Answers:
encodeURIComponent()
在JS和PHP中使用时,您应该收到正确的值。
注意:当您访问$_GET
,$_POST
或$_REQUEST
在PHP中,要检索已经被解码值。
例:
在您的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']; // "+"
仅原始HTTP请求包含url编码的数据。
对于GET请求,您可以从URI. $_SERVER['REQUEST_URI']
或中检索该请求$_SERVER['QUERY_STRING']
。对于邮递区号,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">
也可以在PHP中使用Content-Type HTTP Header进行设置。header('Content-Type: text/html;charset=UTF-8');
PS:&rsqo; 无法在浏览器中解码(FF3.5)。
您正在寻找的十六进制值是 %2B
要在PHP中自动获取它,请通过运行字符串urlencode($stringVal)
。然后粗暴urldecode($stringVal)
地跑回去。
如果要让JavaScript处理,请使用 escape( str )
编辑
@bobince发表评论后,我做了更多阅读,他是正确的。使用encodeURIComponent(str)
和decodeURIComponent(str)
。逃生不会转换角色,只有逃离他们\
的
escape
(或unescape
);它们与URL编码不同,并且+和任何非ASCII Unicode字符都会出错。encodeURIComponent / decodeURIComponent几乎总是您想要的。
如果您必须在php中进行卷曲,则应urlencode()
从PHP中使用,但要单独使用!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
如果这样做urlencode(strPOST)
,将给您带来另一个问题,您将拥有一个Item1,并且&将更改%xx值并成为一个值,请在此处查看返回!
例子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'");
}
?>