情況如下:
- php 5.5.11
- mac osx 10.9.2、win7、centOS 6.3
代碼如下:
echo preg_replace('/[\s-]+/', '-', '阿樹')."\n";
測試結果如下:
增加模式修正符後正常,如下:
echo preg_replace('/[\s-]+/u', '-', '阿樹')."\n";
尋找資料,是這麼說的:
u(PCRE_UTF8)
此修正符啟用了一個 PCRE 中與 Perl 不相容的額外功能。模式字串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。
請問:
- u的意思就是將匹配的字元當作utf8嗎,還有其他作用嗎
- My Code是utf8,但是為什麼只有mac(Unix)會亂碼呢?
回複內容:
情況如下:
- php 5.5.11
- mac osx 10.9.2、win7、centOS 6.3
代碼如下:
echo preg_replace('/[\s-]+/', '-', '阿樹')."\n";
測試結果如下:
增加模式修正符後正常,如下:
echo preg_replace('/[\s-]+/u', '-', '阿樹')."\n";
尋找資料,是這麼說的:
u(PCRE_UTF8)
此修正符啟用了一個 PCRE 中與 Perl 不相容的額外功能。模式字串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。
請問:
- u的意思就是將匹配的字元當作utf8嗎,還有其他作用嗎
- My Code是utf8,但是為什麼只有mac(Unix)會亂碼呢?
樹的utf8表示是e6 a0 91。敏感的話看到這裡就應該明白了。
第二個位元組a0和\n是一樣的,從而被替換成了-,剩下左右兩邊的兩個位元組變成非法ASCII,顯示成問號了,至於平台差異性,估計是所謂PCRE的問題吧,有興趣可以鑽進去查查