我在https://3v4l.org/bUqlj爲什麼某些版本的PHP似乎把Unicode作爲不可打印
<?php
var_dump(preg_replace('/[^[:print:]]/u', 'x', "你"));
跑3v4l.org下面的代碼示例,它似乎是PHP的一些老版本正在返回「×」。這似乎是不正確的行爲。我試圖查看這種行爲是否記錄在網上某處,但無法找到它。
我在https://3v4l.org/bUqlj爲什麼某些版本的PHP似乎把Unicode作爲不可打印
<?php
var_dump(preg_replace('/[^[:print:]]/u', 'x', "你"));
跑3v4l.org下面的代碼示例,它似乎是PHP的一些老版本正在返回「×」。這似乎是不正確的行爲。我試圖查看這種行爲是否記錄在網上某處,但無法找到它。
這似乎是PCRE問題的結果。 3V4L上的輸出顯示事情在v5.4.41之後的v5.4系列以及v5.5.10之後的v5.5系列中開始工作。現在
,看着PHP更新日誌:
所以升級遠離PCRE V8 .32解決了問題(請注意,v5.6系列在v5.6.0中以PCRE v8.34開始)。縱觀PCRE changelog,我們看到下Version 8.34 15-December-2013
節,第31項:
升級的POSIX類的處理[:圖:],[:打印:]和[:PUNCT:當PCRE_UCP設置以便包含與Perl在Unicode模式下相同的字符。
這看起來是修改你的測試用例的改變。
有一點需要補充:'\ P {C}'[相當於](http://www.regular-expressions。當使用unicode修飾符時,'/ [^ \ P {C}]/u'應該與'/ [^ [:print:]]/u'但是[在所有版本中都可以使用](https://3v4l.org/GqaYE)。 –
謝謝@nj_!我直接用這些正則表達式運行'pcregrep'的一些測試後懷疑這個確切的更新日誌條目 – xuanji
那是什麼腳本? – 2016-02-29 20:12:55
@noob https://zh.wiktionary.org/wiki/%E4%BD%A0 – xuanji