【php】strlenがバイト数を返さなくなる場合
問題
strlen()がバイト数を返さなくなる場合があるらしく、わざわざ以下のように関数を定義しているライブラリを見かけました。
function _strlen($binary_string) { if (function_exists('mb_strlen')) { return mb_strlen($binary_string, '8bit'); } return strlen($binary_string); }
どういう場合にこれを考慮する必要があるのでしょうか。
答え
mbstringは、関数を上書きできる機能(関数のオーバーロード機能)があります。
mbstringが有効な環境で、php.iniで以下の項目が0以上に設定されていると、各種関数が mb_* の関数で上書きされます。
mbstring.func_overload
https://www.php.net/manual/ja/mbstring.overload.php
phpinfo()等で確認して、設定値が0ならば心配ありません。
混乱するのでこのような機能はないほうが良いと思ったらそのとおりで、以下の警告がマニュアルにありました。
警告 この機能は PHP 7.2.0 で 非推奨になります。この機能に頼らないことを強く推奨します。
メモ
もしそのような環境でバイト数を取得したい場合は、
mb_strlen($binary_string, '8bit');
をすればよいということですね。参考になります。
コメント