2011-02-27 66 views
2

我試圖轉換所有的& nbsp;實例常規空格在PHP中:UTF-8和ISO 8859-1編碼在PHP

echo '<meta charset="UTF-8" /> '; 
echo html_entity_decode('&nbsp;'); 
echo html_entity_decode('&nbsp;', ENT_COMPAT, 'UTF-8'); 

如果第一行被註釋掉,那麼輸出將在ISO 8859-1和閱讀:

 

凡在前面的空間。如果指定UTF-8編碼,它讀取:

哪個是一個未定義的UTF-8字符後跟一個空格。無論如何,無論編碼如何,確保所有的HTML實體空間都被正確解碼?

空格字符實際上只是一個例子,我想要做的是從未指定的字符集讀取html輸入並顯示它。所以<和&#60;都會變成<。

回答

1

這是編碼問題。它們不兼容。對於每種編碼,您必須在html_entity_decode中使用不同的選項。但是,您可以先將輸入轉換爲utf-8(iconv),然後再使用html_entity_decode($string, ENT_COMPAT, 'UTF-8')

如果你不知道輸入的編碼,你必須猜測。

3

&nbsp;不是空格。它是ISO 8859-1中的字節160,在UTF-8中是\xc2\xa0。由於名稱no breakable space意味着瀏覽器不會將其替換爲換行符。

如果你想要一個空間,你將不得不用一個空間替換它。

+0

' '是* a *空格字符,而不是*空格字符。 – dan04 2011-02-28 01:57:38

+0

@ dan04 - 它只是一個空格,如果呈現爲html。正如Chris所回答的那樣,Content-type頭文件應該設置爲html,以便瀏覽器將其呈現爲空間。 – 2011-03-01 12:08:10

0

爲什麼不先發送標題?

header("Content-type: text/html; charset=utf-8"); 
echo html_entity_decode("&nbsp;", ENT_COMPAT, 'UTF-8');