特定の文字が含まれるページがAutoLinkされない (PHP7.3, PHP7.4)†
- ページ: BugTrack
- 投稿者: umorigu
- 優先順位: 低
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2021-04-20 (火) 01:01:37
- バージョン: 1.5.3
- リリース予定バージョン: 1.5.4
メッセージ†
AutoLinksで"潰瘍性大腸炎"と"炎症性腸疾患"を作成しても、リンクが形成されません。 .datファイルには正規表現で記載されていますが、ページでリンクとして書き換え処理ができていないようです。
pukiwiki:質問箱/5407 より
再現しました (PukiWiki 1.5.3/PHP7.4/UTF-8) 。「腸」という文字が含まれるとNGみたいです。「ああ腸」のようなページもリンクされませんでした(umorigu)
暫定対策:
lib/make_link.php :150 の '/x' を '/xu' にすることでAutoLinkされるようになります。
function convert($string, $page)
{
$this->page = $page;
$this->result = array();
- $string = preg_replace_callback('/' . $this->pattern . '/x',
+ $string = preg_replace_callback('/' . $this->pattern . '/xu',
array(& $this, 'replace'), $string);
$arr = explode("\x08", make_line_rules(htmlsc($string)));
- PHP7.2 OK ; PHP7.3 NG (AutoLinkされず) でした。 BugTrack/2512と同じく、PHP7.3での正規表現エンジンの変更が影響している可能性があります -- umorigu
- 本件は BugTrack/2512 の修正で直っていました。(少し、事後的に実装を修正しました) commit:d03da57827 preg_replace は100か所、 preg_ は400か所ほど見つかったので影響を考えて、 preg関数のうち、オプションに /x を与えている5か所のみ、u を追加して /xu としています。(本来は、UTF-8設定で preg系正規表現関数を利用する際は常に u を設定するのが正しそうではあります ) -- umorigu
- lib/func.php - get_autoaliases()
- lib/init.php - $NotePattern
- lib/make_link.php - class InlineConverter - convert(), get_objects(); class Link_plugin - set()