2012-04-12 5 views
2

私のウェブサイトにはÂという文字で問題があります。PHP:html_entity_decode文字を削除する/表示しない

私は、ユーザーがwysiwygエディタ(ckeditor)を使用してプロフィールを記入できるウェブサイトを持っています。コンテンツは、セキュリティ上の理由から、htmlpurifyを介してデータベースに格納されます。

データベースには、すべてのテーブルがUTF-8文字セットで設定されています。私はまた、スクリプトの実行の冒頭に「SET NAMES utf-8」と呼んで問題が発生しないようにしています。テキストが表示されるWebページには、content-typeがutf-8で、header()関数を使用してcontent-typeとcharsetも設定します。

テキストを表示するときに、コンテンツで正規表現を実行しようとするまでは、すべてうまく見えました。 html_entity_decode( 'utf-8'のエンコーディングパラメータで呼び出されました)は何らかの理由でÂ文字を表示していない/表示していないので、すべての正規表現が失敗する原因が残っています(文字はありますが、それをソースで見る)。

正規表現を実行できるように、この文字を防止または削除するにはどうすればよいですか?

編集:私はckeditorを放棄し、このサイトのようにマークダウン形式を使用することで、より柔軟性を持たせることにしました。私が覚えている限り、私はエディタを嫌っていました。すべてのプロファイルを新しい形式に更新すると、問題のテキストをすべて削除してサイトをクリーンな状態に戻すことができます。すべての入力をありがとう。

+0

:?これを避けるには、常にマルチバイト(ユニコード)をサポートしていmb_ereg_replaceを使用して試すことができますか –

+0

空の段落タグを削除しています。何らかの理由で、ユーザーは編集時に余分な行を追加して、ウェブサイトを恐ろしく見えるようにします。それは、空白および/またはnbspだけで段落タグを削除する必要があります。エンティティ。例:http://dev.lovewichita.org/church/profile/25.html – kkeith29

+0

+1教会を助けるために+1 – ANisus

答えて

1

文字列が実際に正しくUTF-8でエンコードされていない状況に直面している可能性があります(書いたとおりですが、そうではありません)。 html_entity_decodeは、置換文字を含む無効なUTF-8バイトシーケンス(たとえば、Âのシングルバイト文字セットエンコーディング)を削除することがあります。

使用しているPHPのバージョンによっては、フラグを使用することでこれに対処する方法をより詳細に制御できます。

さらに、表示されない文字を見つけるには、hexdump of the stringを作成します。あなたが話している文字がANSI文字セットの中に存在しているので

+0

古いバージョンのWebサイトからコピーして貼り付けました。テキストは、UTF-8文字セットで読める形式に変換されませんか? – kkeith29

+0

@ kkeith29:それは異なります。 UTF-8を使用しても、今はすべてが魔法のように動作するわけではありません。単なる文字エンコーディングです。私はあなたの問題と問題に遭遇した文字列のhexdumpに問題があるコードを追加するのが最も有益だと思います。 – hakre

+0

テキストを生成するコードは、フレームワーク(フォームクラス、コントローラ、モデル、ヘルパー)全体に広がっているため、ここに投稿するのは難しいです。ヘックスダンプについて言及していただき、ありがとうございました。どのように役立つかについて、多くの研究を行いました。データがテキストに変換され、文字セットがその中でどのように演奏されるかに関する知識が大幅に拡大されました。あなたのおかげで、私はそれが文字列の文字セットの問題であることを確認しました(スペースは犯人です、私は理解しているものからマルチバイトのもののために、2つの文字、スペースとして表示されています)。 – kkeith29

1

、あなたはこれを行うことができます。

utf8_encode(preg_replace($match, $replace, utf8_decode($utf8_text)); 

しかし、これは、任意のUnicode文字がANSI文字セット内に存在しませ破壊します。あなたの正規表現は何をやっている

string mb_ereg_replace (string $pattern , string $replacement , string $string [, string $option = "msr" ])

関連する問題