2010-02-22 20 views
1

我有某種形式的數值,其中包括HTML實體,例如:爲什麼PHP會自動自動解碼HTML實體?

<option value="Coup&#232;"> Coup&#232; </option> 

但是,一旦形式發佈到服務器,如果我做一個print_r($_POST);然後查看該頁面的源代碼,實體ISN那裏,它的實際重音字符。

我想我可以通過htmlentities來運行發佈數據,但我想知道這是PHP的這種標準行爲嗎?或者這是我可以關閉的東西嗎?

回答

9

PHP不是;瀏覽器是。你可以用Firebug或嗅探器來檢查。

+0

他說他查看了源代碼雖然... – alex 2010-02-22 03:16:24

+1

@alex頁面的來源沒有解碼,表單提交的值是。 – 2010-02-22 03:17:04

+0

瀏覽器在將其作爲後期值發送之前更改該值。 – Marius 2010-02-22 03:17:43

0

瀏覽器在遇到它時解碼實體,這就是它們的用途。字符串&#232;意味着「親愛的瀏覽器,請用'è'這個字符替換它,因爲無論什麼原因,我都不能直接寫'è'。」

瀏覽器將解碼頁面中使用的任何實體,而不管它們是否可見文本或屬性值。

所以,因爲瀏覽器被解碼的實體,您必須實體編碼本身,如果你想使用,可以被解碼爲一個實體的字符串:

Coup&amp;#232; 

這將被解碼瀏覽器

Coup&#232; 

我會質疑使用這雖然,在這個時代,在大多數情況下,Unicode字符應該不會構成問題,以保證這樣的編碼開始。只需寫下「Coupè」並完成它。 :)