0

ajax を使用して、 HTML および utf8 文字 (例: 中国語、日本語のアラビア文字) を含むユーザー入力をphp スクリプトに送信して、データベースに保存しようとしています。

私は通常、url に配置する前に最初に html コンテンツをエスケープします。ただし、エスケープにより、uft8 文字が 16 進コードになります。

例(オリジナル):

<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()これらのリクエストを自動的に処理しますが、JavaScript のものescape()は PHP のものと同じではありませんurlencode()。たとえば、ではなくurlencode('テスト')を出力します。"%E3%83%86%E3%82%B9%E3%83%88""%u30C6%u30B9%u30C8"

JavaScriptencodeURIComponent()の代わりに使用してみてください。escape()

PS。実際、この関数は と完全に等しいわけではありませんurlencode()が、質問を解決する可能性があります =)

于 2013-01-20T15:57:52.397 に答える