2

さて、文字列のサニタイズに関する情報はたくさんありますが、コンテンツ管理システムに挿入するためのユーザー入力 (今入力しているものなど) を準備するための最良の方法、そしてフィルター処理の方法については、私が見つけることができるものはほとんどありません。出てきます。

私は 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');
                            }

残念ながら、これでも一貫性のない結果が得られます。ほとんどの場合、® 記号は小さなひし形になります。

私はこれについて良いことを探しましたが、最良の方法が何であるかを見つけることができないようです...

4

5 に答える 5

1

申し訳ありませんが、Web ページのヘッダーが wysiwyg エディターによってスクラブされました。わかりやすくするために:

Web ページのヘッダーは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
于 2009-01-28T15:12:41.807 に答える
1

データベースに htmlentities を入れないでください! 決して html_entities() を呼び出さないでください。php から非推奨にする必要があります。htmlspecialchars を使用しますが、データベースに入れる前ではなく、テキストを表示するときに使用します。ポイントは、データが html として扱われないようにすることです。商標記号や著作権記号を翻訳しても意味がありません。リスクがないからです。心配する必要がある唯一の html は次のとおりです: > < & ' "

于 2009-02-02T16:11:38.730 に答える
0

私はかつて、phpファイル自体のエンコーディングに至るエンコーディングに問題がありました。したがって、基本的にファイル自体が utf-8 にエンコードされていることを確認してください。vim では :e ++enc= を実行できます

于 2009-01-31T04:53:16.323 に答える
0

http://us3.php.net/utf8_encode http://us3.php.net/utf8-decode

それは役立つはずです。

于 2009-01-28T15:14:35.577 に答える