1

ほとんどの場合、HTMLドキュメントであるはずのファイルがたくさんありますが、エディターが他のソースからテキストをコピーして貼り付けることがあるので、時々奇妙な文字に出くわします-たとえば、非-エンコードされた著作権記号、またはダッシュやマイナスのように見える奇妙なもの (ascii #146?)、または "..." のような単一の文字。get_html_translation_table() を見てみましたが、これは & やユーロ記号などの「通常の」特殊文字のみを置き換えますが、正規表現が必要で、許可された文字のみを指定し、不明な文字をすべて破棄する必要があるようです。ここでこれを試しましたが、これはまったく機能しませんでした:

function fixNpChars($string)
{
    //characters in the hexadecimal ranges 00–08, 0B–0C, 0E–1F, 7F, and 80–9F cannot be used in an HTML document, not even by reference.
    $pattern = '/[\x{0000}-\x{0008}][\x{000B}-\x{000C}][\x{000E}-\x{001F}][\x{0080}-\x{009F}][x{007F}]/u';
    $replacement = '';
    return preg_replace($pattern, $replacement, $string);   
}

ここで何が問題なのですか?

編集:

インポートしたファイルを保存するデータベースと php 側はすべて utf-8 に設定されています (コンテンツ タイプ utf-8、db テーブル charset utf8/utf8_general_ci、mysql_set_charset('utf8',$this->mHandle); は db 接続後に実行されます)。インポートされたファイルのほとんどは、utf8 または iso-8859-1 のいずれかです。

4

2 に答える 2

0

htmlentities無効な文字を削除することが最良の選択肢であるとは考えないでください。この問題は関数と関数を使用して解決できますhtml_entity_decode

于 2011-07-04T07:57:45.737 に答える
0

正規表現の構文には少し問題があるようです。多分これ?:

$pattern = '/[\x00-\x08][\x0B-\x0C][\x0E-\x1F][\x80-\x9F][x7F]/u';

于 2011-07-04T05:20:43.247 に答える