さて、文字列のサニタイズに関する情報はたくさんありますが、コンテンツ管理システムに挿入するためのユーザー入力 (今入力しているものなど) を準備するための最良の方法、そしてフィルター処理の方法については、私が見つけることができるものはほとんどありません。出てきます。
私は 2 つの多言語 (日本語、英語 + その他のロマンス語) CMS を構築しており、®、™ などの特殊文字を日本語の文字と一緒に表示するのに苦労しています。
非常に一貫性のない結果が得られ続けています。
すべてを UTF-8 に設定しています。
Web ページ: および
.htaccess ファイル: AddDefaultCharset UTF-8 AND (問題を強制するため)
各データベース接続の後: mysql_query("SET NAMES 'UTF8'");
各データベース、テーブル、およびフィールドも utf8_general_ci に設定されます
魔法の引用符はオフです。最初に htmlpurifier のデフォルト設定でユーザー入力を前処理し、次にこの関数を実行します。
function html_encode($var) {
// Encodes HTML safely for UTF-8. Use instead of htmlentities.
$var = htmlentities($var, ENT_QUOTES, 'UTF-8');
// convert pesky special characters to unicode
$look = array('™', '™','®','®');
$safe = array('™', '™', '®', '®');
$var = str_replace($look, $safe, $var);
$var = mysql_real_escape_string($var);
return $var;
}
これでデータベースに登録されます。
この関数ですべてをフィルタリングして、データベースから返します。
function decodeit($var) {
return html_entity_decode(stripcslashes($var), ENT_QUOTES, 'UTF-8');
}
残念ながら、これでも一貫性のない結果が得られます。ほとんどの場合、® 記号は小さなひし形になります。
私はこれについて良いことを探しましたが、最良の方法が何であるかを見つけることができないようです...