ajax を使用して、 HTML および utf8 文字 (例: 中国語、日本語のアラビア文字) を含むユーザー入力をphp スクリプトに送信して、データベースに保存しようとしています。
私は通常、url に配置する前に最初に html コンテンツをエスケープします。ただし、エスケープにより、uft8 文字が 16 進コードになります。
例(オリジナル):
<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() が原因なのかわかりません。何か案は?