ローカルサイトでこのエラーが発生します。
Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
誰かが知っていますか、問題は何ですか、またはこれに対する解決策は何ですか?
ありがとう。
ファイルが次のようにエンコードされている場合は、必ずUTF-8にエンコードを指定してください。
htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
htmlspecialchars
のデフォルトの文字セットはISO-8859-1です(PHP v5.4以降、デフォルトの文字セットは 'UTF-8'になりました)。これが理由を説明している可能性があります。マルチバイト文字に出会ったら、ヘイワイヤーに行きます。
私は本番環境でこのエラーに遭遇し、それに関するこの素晴らしい投稿を見つけました-
http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid
PHP(少なくともCentOSの場合))のバグで、表示エラーがオフのときにこのエラーが表示されるようです。
破損した文字データを関数にフィードしているか、正しいエンコーディングを指定していません。
私はしばらく前にこの問題を抱えていましたが、古い動作(PHP 5.2.7と思います)以前)は破損しているにもかかわらず文字列を返すことでしたが、そのバージョン以降、代わりにこのエラーがスローされます。
私の解決策は、破損したデータを削除するために// IGNORE修飾子を使用して iconv を介して文字列をフィードするスクリプトを作成することでした。
(UTF-8にいくつかの文字列があり、通常は列に誤って定義された文字タイプを持つlatin-1にある、破損したデータベースがありました)。
(Tatuの回答へのコメントを見て、私は$ charset変数の内容を見る(そして遊ぶ)ことから始めます。
エラーが発生しないようにするための正しいコードは次のとおりです。
htmlentities($string, ENT_IGNORE, 'UTF-8') ;
これに加えて、str_replace
を使用して、必要に応じていくつかの不正な文字を置き換えてから、htmlentities関数を使用することもできます。
これを見てください rss feed それはgtへのより大きなhtml記号を置き換えました; RSSフィードを読んでいるときに見栄えがよくないタグ。これを「-」記号や「)」などに置き換えることができます。
Utf-8文字列でsubstr
を使用していたため、同じ問題が発生しました。
エラーはまれで、一見ランダムに見えました。マルチバイト文字で文字列がカットされた場合にのみエラーが発生しました!
mb_substr
問題を解決しました :)
これは、実際に私が受ける最も頻繁なエラーの1つです。
時々私は__()翻訳を使用しません-äöüを含む単なるドイツ語のテキスト。そこでは、ファイルのエンコーディングに注意することが特に重要です。
したがって、特別な文字を含むファイルをUTF8として適切に保存するようにしてください。