2017-06-21 79 views
1

您好!PHP str_replace不替代字符「°」

我從.xlsx文件得到一個字符串 - >"N°X"

我想通過Num_X

更換"N°"我試圖做到這一點與

$var = str_replace("N°","Num_",$var); 

但沒有被替換(根據echo $var) 問題來自°因爲當我嘗試替換一些字符串其他 (無°)str_replace工程

有什麼建議嗎?

+0

這可能與您要替換的角色不同,但角色看起來很相似。 – Barmar

+1

嘗試mb_str_replace,但它適用於本地。它必須是一個不同於你想象的字符 – Ice76

+0

@ Ice76我在本地機器上嘗試過,似乎很好。 – ctwheels

回答

0

確保輸入字符串是UTF8。

$var = "N°X"; 
print mb_detect_encoding($var); 

如果你沒有得到UTF-8了這一點,把它轉換:

$var = mb_convert_encoding($var, 'UTF-8'); 

然後按預期的str_replace將工作。

另一個可能幫助你解決編碼問題的工具是xxd

php -r '$var = "N°X"; echo $var;' | xxd 

應返回

00000000: 4ec2 b058        N..X 

從而揭示了中間字符被編碼爲C2B0十六進制,這是 Unicode字符 '度SIGN'(U + 00B0)。 fileformat.info現在得心應手。

+0

也謹防unicode [NUMERO SIGN](http://www.fileformat.info/info/unicode/char/2116/index.htm)字符(№)。 –

+0

哎呀,我想我會得到一些通知,如果我得到一些答案 是的,這就是我所做的$ var = mb_convert_encoding($ var,「Windows-1252」,「UTF-8」);它的工作原理:) 謝謝 –