通过URL传递带有html的utf8字符?

时间:2012-10-09 09:10:26

标签: php jquery html

我正在尝试使用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()导致它? 有什么想法吗?

1 个答案:

答案 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(),但它可以解决你的问题=)