【PHP】PHP8.1.8リリースと mb_convert_encoding の修正

  • 2022年7月8日
  • 2022年7月8日
  • PHP

 PHP8.1.8 が2022年7月6日 6:54(日本時間)にリリースされました。

Release php-8.1.8 · php/php-src
PHP: PHP 8 ChangeLog#Version 8.1.8

 マイナーバージョンアップであり、細かい修正がほとんどです。日本人的にこの中の修正として特筆すべきものがありましたので紹介です。

 修正には mb_convert_encoding の挙動の修正が含まれています。修正のプルリクエストが次です。

Restore backwards-compatible mappings of 0x5C and 0x7E in SJIS by alexdowad · Pull Request #8719 · php/php-src

 この修正により以前記事にした\~の変換結果が予期せぬ結果になる問題が解決され、PHP8.0 以前と同じ結果を得られる様になりました。

【PHP】PHP8.1ではPHP8.0以前と異なり mb_convert_encoding($str, ‘SJIS’, ‘UTF-8’) で\と~が¥と~に変換される – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発

 例えば次のコードを実行すると

<?php
function conv($str): string
{
    $res = '';
    $res .= '    SJIS: ' . mb_convert_encoding($str, 'SJIS', 'UTF-8') . "\n";
    $res .= 'SJIS-win: ' . mb_convert_encoding($str, 'SJIS-win', 'UTF-8') . "\n";

    return $res;
}
$res = '';
$res = conv('あ');
$res .= conv('~');
$res .= conv('\\');
echo $res;

 PHP8.1.0 ~ PHP8.1.7 では

    SJIS: あ
SJIS-win: あ
    SJIS: ~
SJIS-win: ~
    SJIS: \
SJIS-win: \

 となり、PHP8.0以前やPHP8.1.8 では

    SJIS: あ
SJIS-win: あ
    SJIS: ~
SJIS-win: ~
    SJIS: \
SJIS-win: \

 となります。これで今後は気兼ねなくmb_convert_encoding関数を使えます。 alexdowad さんありがとう。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG