2010-11-05 48 views
2

在htmlentities中,如何選擇性地對符號進行編碼,以便它不編碼標籤的<>,但是編碼是&PHP htmlentities

+2

你在說「。:;,!?」嗎?如果是這樣,你爲什麼要編碼他們?或者你在談論引號? – thejh 2010-11-05 20:57:18

+1

1.永不使用htmlentities。 2.不要編碼'<' and '>','''和引號旁邊的任何內容。 – 2010-11-05 20:59:59

+2

這個問題的正確解決方案很可能是「忘記編碼實體,並確保您聲明您使用的字符編碼」:http://www.w3.org/International/O-charset – Quentin 2010-11-05 21:00:13

回答

3

只需使用:

<?php 
$string = str_replace('&', '&amp;', $string); 

參考this約從官方文檔str_replace函數的詳細信息。

1

嘗試這樣:

$string = htmlentities($string); 
$string = str_replace(array('&lt;','&gt;'), array('<', '>'), $string); 

在官方文檔,htmlentitiesstr_replace

+0

err ...在第二個例子中,你忘記了一個參數 – thejh 2010-11-05 21:05:00

+0

哇,那不得不被編輯..謝謝。 – 2010-11-05 21:16:41

+0

@Col它看起來像原來的帖子想要使用htmlentities編碼除< and > – 2010-11-05 21:17:47

2

你沒有得到一個「部分編碼」選項;如果您想要轉義或不轉義特定字符,您將不得不手動完成。例如做你說什麼你想:

str_replace('&gt;', '>', str_replace('&lt;', '<', htmlentities($s))) 

什麼是你想要做的,儘管它?以上看起來不太可能有用。標記中的"字符仍然會被轉義,從而損壞屬性值。

htmlentities也普遍存在問題,因爲除非您專門爲它提供正確的字符集參數,否則它會將字符串中的任何非ASCII字符壓入錯誤的HTML實體引用。通常使用htmlspecialchars()會更好,它隻影響真正特殊且需要在HTML中轉義的少數字符。

如果你想要做的就是跳過&這個字符,你可以用一個簡單的str_replace('&', '&amp;', $s)來做到這一點,但是它仍然會取代作爲有效實體或字符引用一部分的&符號。你確定要這麼做嗎?你只是想修復不正確使用的非轉義符號嗎?如果是這樣,你可以嘗試一個正則表達式來選擇任何使用不是有效的實體/字符引用的&