浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

 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 さんありがとう。

  • この記事いいね! (0)