2010-08-18 23 views
10

我在HTML中的URL:編碼問題,coverting &到&對於HTML使用PHP

<a href="index.php?q=event&amp;id=56&amp;date=128"> 

我需要把它變成一個字符串完全一樣:

<a href="index.php?q=event&id=56&date=128"> 

我知道如何這與preg_replace等,但有沒有在PHP函數,直接處理編碼,我可以用於其他編碼問題,如& nsbp(或不管它是什麼等)?理想情況下,我會將我的字符串發送到函數中,它會輸出'&'而不是& amp。是否有將&TEXT;轉換爲實際字符的通用功能?

編輯:對不起,在我輸入問題之前發佈了這個。問題現已完成。

回答

17

使用html_entity_decode()

$newUrl = html_entity_decode('<a href="index.php?q=event&amp;id=56&amp;date=128">'); 
echo $newUrl; // prints <a href="index.php?q=event&id=56&date=128"> 
+0

注意'htmL_entity_decode'和'' 的。你可以用'$ txt = str_replace(「\ xA0」,'',$ txt);'替換它。 – testing 2012-09-05 11:32:58

4

使用htmlspecialchars_decode。直接從PHP文檔頁面實例:

$str = '<p>this -&gt; &quot;</p>'; 
echo htmlspecialchars_decode($str); // <p>this -> "</p> 
+1

html_entity_decode - 轉換所有適用的字符,htmlspecialchars_decode - 轉換特殊字符...(來自php.net) – 2010-08-18 21:49:11

1

沒有內置的PHP函數,將採取這樣的實體&amp;,並把它變成一個雙&。萬一有任何混淆,爲&的HTML實體實際上是&amp;,不amp;,因此在運行任何內置在你的榜樣解析器將返回以下內容:

<a href="index.php?q=event&id=56&date=128"> 

,而不是

<a href="index.php?q=event&&id=56&&date=128"> 

爲了獲得雙&版本,您需要使用正則表達式。

或者,如果您實際上需要單個版本&,則有兩種可能性。

  1. 如果你只是想轉換&amp; &quot; &#039; &lt; &gt;那麼你應該使用htmlspecialchars_decode。這對你給的例子來說就足夠了。
  2. 如果你想轉換格式爲&TEXT;的任何字符串,那麼你應該使用html-entity-decode

我懷疑htmlspecialchars_decode會比html_entity_decode快,所以如果它覆蓋了所有你想轉換的實體,你應該使用它。

+0

+1 - 感謝關於這兩個選項之間差異的後續要點。 – JMC 2010-08-18 23:41:11

0

字符串後經過TinyMCE的只有這個代碼幫助我

$string = iconv('UTF-8','cp1251',$string); 
$string = str_replace(chr(160), chr(32), $string); 
$string = iconv('cp1251','UTF-8',$string);