0

我正在尝试使用 ajax 将包含 HTML 和 utf8 字符(例如:中文、日文阿拉伯字符)的用户输入发送到php脚本,以便将其存储在数据库中。

我通常先转义() html 内容,然后再将其放入 url。但是转义导致 uft8 字符变为十六进制代码。

例如(原始):

<div id="box">テスト&lt;/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() 导致它?有任何想法吗?

4

1 回答 1

0

PHP 会urldecode()自动处理这些请求,但 JavaScriptescape()不等于 PHP 的urlencode(). 例如,urlencode('テスト')将输出"%E3%83%86%E3%82%B9%E3%83%88",而不是"%u30C6%u30B9%u30C8"

尝试在 JavaScript中使用encodeURIComponent()而不是。escape()

PS。事实上,这个函数并不完全等于urlencode(),但它可能会解决你的问题 =)

于 2013-01-20T15:57:52.397 回答