web-dev-qa-db-ja.com

htmlspecialchars():引数のマルチバイトシーケンスが無効です

ローカルサイトでこのエラーが発生します。

Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]

誰かが知っていますか、問題は何ですか、またはこれに対する解決策は何ですか?

ありがとう。

15
gautamlakum

ファイルが次のようにエンコードされている場合は、必ずUTF-8にエンコードを指定してください。

htmlspecialchars($str, ENT_COMPAT, 'UTF-8');

htmlspecialcharsのデフォルトの文字セットはISO-8859-1です(PHP v5.4以降、デフォルトの文字セットは 'UTF-8'になりました)。これが理由を説明している可能性があります。マルチバイト文字に出会ったら、ヘイワイヤーに行きます。

14
Tatu Ulmanen

私は本番環境でこのエラーに遭遇し、それに関するこの素晴らしい投稿を見つけました-

http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid

PHP(少なくともCentOSの場合))のバグで、表示エラーがオフのときにこのエラーが表示されるようです。

5
gingerCodeNinja

破損した文字データを関数にフィードしているか、正しいエンコーディングを指定していません。

私はしばらく前にこの問題を抱えていましたが、古い動作(PHP 5.2.7と思います)以前)は破損しているにもかかわらず文字列を返すことでしたが、そのバージョン以降、代わりにこのエラーがスローされます。

私の解決策は、破損したデータを削除するために// IGNORE修飾子を使用して iconv を介して文字列をフィードするスクリプトを作成することでした。

(UTF-8にいくつかの文字列があり、通常は列に誤って定義された文字タイプを持つlatin-1にある、破損したデータベースがありました)。

(Tatuの回答へのコメントを見て、私は$ charset変数の内容を見る(そして遊ぶ)ことから始めます。

4
berty

エラーが発生しないようにするための正しいコードは次のとおりです。

htmlentities($string, ENT_IGNORE, 'UTF-8') ;

これに加えて、str_replaceを使用して、必要に応じていくつかの不正な文字を置き換えてから、htmlentities関数を使用することもできます。

これを見てください rss feed それはgtへのより大きなhtml記号を置き換えました; RSSフィードを読んでいるときに見栄えがよくないタグ。これを「-」記号や「)」などに置き換えることができます。

1
Sailab Rahi

Utf-8文字列でsubstrを使用していたため、同じ問題が発生しました。
エラーはまれで、一見ランダムに見えました。マルチバイト文字で文字列がカットされた場合にのみエラーが発生しました!

mb_substr 問題を解決しました :)

1
CoR

これは、実際に私が受ける最も頻繁なエラーの1つです。

時々私は__()翻訳を使用しません-äöüを含む単なるドイツ語のテキスト。そこでは、ファイルのエンコーディングに注意することが特に重要です。

したがって、特別な文字を含むファイルをUTF8として適切に保存するようにしてください。

0
mark