ローカル サイトでこのエラーが発生しています。
Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
誰が知っていますか、問題は何ですか、またはこれに対する解決策は何ですか?
ありがとう。
ローカル サイトでこのエラーが発生しています。
Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
誰が知っていますか、問題は何ですか、またはこれに対する解決策は何ですか?
ありがとう。
ファイルが UTF-8 としてエンコードされている場合は、エンコードを必ず 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 変数の内容を確認 (および操作) することから始めます。
substr
utf-8 文字列で使用していたため、同じ問題がありました。
エラーはまれで、一見ランダムでした。文字列がマルチバイト文字で切り取られた場合にのみエラーが発生しました!
mb_substr
問題を解決しました :)
エラーが発生しないようにするための正しいコードは次のとおりです。
htmlentities($string, ENT_IGNORE, 'UTF-8') ;
str_replace
これに加えて、必要に応じていくつかの悪い文字を置き換えてから、htmlentities 関数を使用することもできます。
このrss フィードを見てください。大きい html 記号が gt に置き換えられています。RSS フィードを読むときに見栄えが悪いかもしれないタグ。これを「-」記号や「)」などに置き換えることができます。
これは、実際に私が得る最も頻繁なエラーの 1 つです。
__() 翻訳を使用しない場合もあります - äöü を含む単純なドイツ語テキストです。そこでは、ファイルのエンコーディングに注意することが特に重要です。
そのため、特殊文字を含むファイルを UTF8 として適切に保存してください。