#author("2020-08-21T02:40:19+09:00","","")
#author("2020-10-14T00:59:20+09:00;2020-08-21T02:40:19+09:00","","")
* PHP7.3でAutoAliasNameに日本語が含まれていると本文が表示されないことがある [#z180d91e]

- ページ: [[BugTrack]]
- 投稿者: [[umorigu]]
- 優先順位: 低
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2020-08-18 (火) 02:53:23
- バージョン: 1.5.3
- リリース予定バージョン: 1.5.4

** メッセージ [#ecdebd29]
PHP7.3で、正規表現ライブラリPCREのエンジンが更新されたことによる不具合です。

[[pukiwiki:質問箱/5383]]

 $ $php72 --version
 PHP 7.2.0 (cli) (built: Nov 29 2017 00:17:00) ( ZTS MSVC15 (Visual C++ 2017) x86 )
 Copyright (c) 1997-2017 The PHP Group
 Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
 
 $ $php73 --version
 PHP 7.3.0 (cli) (built: Dec  6 2018 02:17:00) ( ZTS MSVC15 (Visual C++ 2017) x86 )
 Copyright (c) 1997-2018 The PHP Group
 Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies

- UTF-8文字列に対して preg_replace で /x フラグを指定し、 /u フラグを指定しないと、PHP7.3 で出力結果が正しくない
- PHP7.2 では問題ない (期待通りの置換結果となる)
- PHP7.4 では PHP7.3 と同じ問題が発生する
- /x フラグを指定しなければ問題ない
- /u フラグを指定する (/xu) と問題ない
- EUC_JP設定では問題ない

b2512.php:
 <?php
 echo "旅行\n";
 echo bin2hex('旅行') . "\n";
 $s = preg_replace('/旅/x', '_', '旅行');
 echo "$s\n";
 echo bin2hex($s) . "\n";

実行(UTF-8):

 $ $php72 b2512.php
 旅行
 e69785e8a18c
 _行
 5fe8a18c
 
 $ $php73 b2512.php
 旅行
 e69785e8a18c
 _▒行
 5f85e8a18c


「旅」e6 97 85 のうち 3バイト目 85 が置換されずに残っている。


実行(EUC-JP):

 $ $php72 b2512eucjp.php
 旅行
 ceb9b9d4
 _行
 5fb9d4
 
 $ $php73 b2512eucjp.php
 旅行
 ceb9b9d4
 _行
 5fb9d4

EUC-JPの場合 PHP7.2とPHP7.3 で差分無し

--------
- 修正しました。 PHP7.0 以降でUTF8設定の場合は preg_replace に '/u' (PCRE_UTF8) オプションを指定します commit:2b0af9ae02 -- [[umorigu]] &new{2020-08-21 (金) 02:20:55};
- 修正しました。 PHP7.0 以降でUTF8設定の場合は preg_replace に '/u' (PCRE_UTF8) オプションを指定します [[commit:2b0af9ae02]] -- [[umorigu]] &new{2020-08-21 (金) 02:20:55};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.046 sec.

OSDN