てきとうなさいと べぇたばん

mb_detect_encodingの古い(PHP 8.0)バージョンの拡張作りました - legacy_mbstringの紹介

TOP > てきとうにこらむ > プログラミング日記 > mb_detect_encodingの古い(PHP 8.0)バージョンの拡張作りました - legacy_mbstringの紹介

mb_detect_encodingの古いバージョンの拡張作りました

PHP 8.1から大幅に変わってしまったために世界中で結構苦労していると思われます。とはいえ、現行のmbstringでは精度が違うものになったので、出される文字コードが違う場合があると困るニーズがあると認識しています。

そこで、mb_detect_encodingの古い挙動を再現する拡張を作りました。

Packagistならば、pie install legacy_mbstring/mb_detect_encodingでインストールできるかと思います。Windows版dllはGitHubのReleasesの0.2.1にあります。

どうやって作った

無理やり、libmbflのPHP 8.0時代を含めてコンパイルします。この影響で、静的に(--enable-legacy_mbstring)コンパイルすることができないという欠点があります。mbstringで含めている現行のlibmbflと名前衝突が起こるためです。

コンパイルするにはphpizeを経由して.soもしくは.dllを作って動的にインストールします。これでLinux、macOS、Windowsで動きます。

つかいかた

legacy_mb_detect_encoding(string $string, array|string|null $encodings = null, bool $strict = false): string|false

PHP 8.0以前と同じ挙動をするはずです。

おわりに

役に立つ?

2026/04/08 17:59