2010-03-08 128 views
1

問題使用html_entity_decode函數對特殊字符 進行解碼後,我用空格替換 實體。我的問題是,當我檢查,如果if ($decoded_str[5] == ' ')這是不正確的,但在$decoded_str[5]存在,這是 解碼前的空間。如何解決此事?我需要能夠檢查它像這樣:if ($decoded_str[5] == ' ')使用html_entity_decode進行解碼,然後出現 

+0

這個問題沒有任何意義......我們是如何得到一個數組出html_entity_decode功能??? – animuson 2010-03-08 19:42:06

+0

你的意思是哪個數組? – AleGore 2010-03-08 19:43:51

+0

你說說它的方式,'$ decoded_str [5]'是一個包含有空格,沒有一個空格的字符串。所以說'$ decoded_str [5] =='「'總是會返回false,因爲字符串不是一個單一的空間,是否正確? – animuson 2010-03-08 19:46:06

回答

4

NBSP有0XA0的字符代碼,空間爲0x20。

根據您的編碼,你可能需要比較(ISO-8859-1 /默認)

if ($decoded_str[5] === '\xa0') 

或(UTF-8)

if ($decoded_str[5] === '\xc2' && $decoded_str[6] === '\xa0') 

從手動html_entity_decode

注:您可能想知道爲什麼trim(html_entity_decode(' '));不會將字符串還原爲空字符串,這是因爲' '實體在默認ISO 8859-1字符集中不是ASCII碼32(其被剝離trim()),而是ASCII碼160(0xa0)。

1

這是因爲 不是空間:這是一個Non-breaking space

這意味着它的字符代碼不是0x20,但0xA0(當然,當然,這取決於字符集,我想...)

+0

0X0A是一個'\ N' .... – kennytm 2010-03-08 19:45:27

+0

@Kenny> ergh;一個帖子中有一個錯字,它就是它不能的地方;-(感謝評論:我糾正了這一點:-) – 2010-03-08 19:48:47

0

這是正確的行爲,因爲html_entity_decode將所有適用的HTML字符,所以也&,所以你能確定使用此檢查空間..

if (htmlentities($dec) == ' ') 

這基本上是用字符串的原始值的比較...

+0

解碼功能不會返回空格... – Marcx 2010-03-08 20:01:21