我正在尝试使用ajax将用户输入 包含 HTML和utf8字符(例如:中文,日文阿拉伯字符)发送到php脚本中存储在数据库中。
我通常先将html内容转义(),然后再将其放入网址。然而逃脱是将uft8字符变为十六进制代码。
例如 (ORIGINAL):
<div id="box">テスト</div>
逃脱后:
%3Cdiv%20id%3D%22box%22%3E%u30C6%u30B9%u30C8%3C/div%3E
发送到php脚本,php解析并将其保存到数据库中(mysql,列类型:文本)。
Php回显保存的数据:
<div id="box">%u30C6%u30B9%u30C8</div>
我还在我的php脚本中使用了这个脚本,以防止php在html \
之前添加"
if(get_magic_quotes_gpc())
{
function undo_magic_quotes_array($array)
{
return is_array($array) ? array_map('undo_magic_quotes_array', $array) : str_replace("\\'", "'",
str_replace("\\\"", "\"",
str_replace("\\\\", "\\",
str_replace("\\\x00", "\x00", $array))));
}
$_GET = undo_magic_quotes_array($_GET);
$_POST = undo_magic_quotes_array($_POST);
$_COOKIE = undo_magic_quotes_array($_COOKIE);
$_FILES = undo_magic_quotes_array($_FILES);
$_REQUEST = undo_magic_quotes_array($_REQUEST);
}
我不确定这个脚本是否导致它或javascript的escape()导致它? 有什么想法吗?
答案 0 :(得分:0)
PHP将自动为这些请求urldecode()
,但JavaScript的escape()
不等于PHP的urlencode()
。例如,urlencode('テスト')
将输出"%E3%83%86%E3%82%B9%E3%83%88"
,而不是"%u30C6%u30B9%u30C8"
。
尝试在JavaScript中使用encodeURIComponent()
代替escape()
。
PS。实际上,这个函数并不完全等于urlencode()
,但它可以解决你的问题=)