この記事では主に、PHP の mb_detect_encoding 関数の使い方について、文字列エンコーディングの変換と判定、未定義関数 mb_detect_encoding() の呼び出しエラーの解決方法などを詳しく紹介します。必要な方は参考にしてください。
php mb_detect_encoding() 関数を使用して、文字列のエンコーディングを決定できます。
php の mb_detect_encoding 関数をエンコード識別に使用する場合、GB2312 と UTF-8、または UTF-8 と GBK など、エンコードが正しくない問題に遭遇した人は多いです (主にここ cp936 の判断について) , ネット上ではmb_detect_encodingは文字が短いため誤判定してしまうと言われています。
コードは次のとおりです:
$encode = mb_detect_encoding($keytitle, array("ASCII","UTF-8","GB2312","GBK","BIG5")); if($encode == "UTF-8"){ $keytitle = iconv("UTF-8","GBK",$keytitle); }
このコードの機能は、文字列のエンコードが UTF であるかどうかを検出することです。 -8. その場合は、GBK に変換します。
ただし、$keytitle = “оƬ”; の場合。検出結果は UTF-8 です。このバグは実際にはバグではありません。プログラムを作成する際には、文字列が短い場合、検出結果が偏る可能性があります。
解決策、コードは次のとおりです。
$encode = mb_detect_encoding($keytitle, array("ASCII","GB2312","GBK","UTF-8");
3 つのパラメータは、検出する入力変数、検出順序です。エンコード方式 (一度 true になると、以下は自動的に無視されます) の場合、厳密モードはエンコード検出の順序を調整し、最大の可能性を最初に配置するため、誤った変換の可能性が低くなります。
通常、gb2312 を最初にソートする必要があります。GBK と UTF-8 がある場合は、よく使用されるものを最初にソートする必要があります。
PHP 文字列エンコーディングの変換と判定
GBK と UTF-8 エンコーディング間の変換は非常に厄介なもので、たとえば PHP の json_encode 自体が動作しません。すべて GBK 形式のエンコードをサポートします。エンコード変換をサポートできるライブラリ関数は 2 つあり、通常、使用すると非常に楽しい iconv 関数が思い浮かびます。 /文字列を GBK エンコードから UTF-8 エンコードに変換します
mb_detect_encoding('test string');
// 使用 iconv 转换并判断是否等值,效率不高 function is_utf8 ($str) { if ($str === iconv('UTF-8', 'UTF-8//IGNORE', $str)) { return 'UTF-8'; } } // 多种编码的情况 function detect_encoding ($str) { foreach (array('GBK', 'UTF-8') as $v) { if ($str === iconv($v, $v . '//IGNORE', $str)) { return $v; } } }上記の方法で文字列エンコード情報を取得した後、iconv または mb_convert_encoding を使用してエンコードを変換できます。
未定義関数 mb_detect_encoding() の呼び出しエラー解決策
Windows システムの場合:
1. 未定義関数の呼び出し: C:\Program Files\AppServ\www\...\xxx.php の 82 行目の iconv() php には文字エンコード変換用の iconv() 関数があります
php.ini ファイル内また、この関数を通常に使用できるようにするための extension=php_iconv.dll
のようなステートメントです。
php.ini ファイルの extension=php_iconv.dll の前にセミコロンがある場合は、それを意味します。存在する場合はコメントアウトされています。セミコロンを削除してサーバーを再起動する必要があります。
問題を解決するには、プログラムを再実行してください。
2. 致命的なエラー: C の未定義関数 mb_detect_encoding() の呼び出し。 \Program Files\AppServ\www\.. .\xxx.php 行 1355
拡張ディレクトリ ファイルの下で php_mbstring.dll を見つけます。
2. php_mbstring.dll ファイルを php.ini ファイルが存在するディレクトリ (php.ini ファイルが存在するディレクトリ: C:\) にコピーします。 WINDOWS)
3. メモ帳で php を開き、ショートカット キー Ctrl F を使用して extension=php_mbstring.dll を検索します。php.ini ファイルに extension=php_mbstring.dll が存在する場合は、それを削除します。行の拡張子の前にセミコロンを追加します。
存在しない場合は、他の extension=... の次の行に extension=php_mbstring.dll を追加します。
最後に、php.ini を忘れずに保存してください。ファイル
5. Apache サーバーを再起動します
php_mbstring が実際にはコピーされていないことがわかりました。
Linux システムの場合:
次の問題が発生した場合:
PHP 1. {main} () /home/xu/web/whois/ab.cn.php: 0PHP 2.base_func->is_exist() /home/xu/web/whois/ab.cn.php:21
PHP 3.strftime() /home/xu/web/whois/whois. mysql.php:46ab.cnis が存在しますdf250b2156c434f3390392d09b1c9563PHP 致命的なエラー: /home/xu /web/whois/whois.main.php の 98
行目で未定義関数 mb_detect_encoding() を呼び出しますインターネットでさまざまな情報を検索したところ、php プラグイン php-mbstring がインストールされていないことがわかりました (学生によっては php.ini でこのプラグインを有効にしていない可能性があります)。メモのためにこの段落を書きます。
まず、yum または apt を使用して mbstring.so をインストールし、次のコマンドを使用します: yum install php-mbstring または apt-get install php-mbstring (ubuntu ユーザーは、インストールする前に apt-cache search mbstring を使用して検索するのが最適です)ソフトウェア名が間違っている可能性があります)
次に、php.ini を変更します。vim /etc/php.ini を実行し、extension="/usr/lib/php/modules/mbstring.so" の内容を追加します。次のパスは、mbstring に従って格納される場合があります。 .so ディレクトリに対応する変更を加えるだけです。通常、変更する必要はありません。
上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP mkdir() に書き込み権限がない問題を解決する方法
##laravel 5.1 での php 職人移行の使用について
以上がPHP で mb_detect_encoding 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。