關於html_entity_decode、空格 以及亂碼

普通ASCII碼空格爲32,可是瀏覽器會對普通空格進行自動歸併,php

也就是若是你輸入10個0x20的空格在HTML頁面裏面,可能會被合併成一個空格。html

若是想要一致的呈現多個空格,就要用到&nbsp,這個空格的編碼爲160,爲西歐ISO-8859-1編碼標準。瀏覽器


爲了讓通過HTML編碼的內容還原爲原來的文本字符,能夠使用html_entity_decode方法,編碼

但這樣問題就來了,一般HTML編碼內容爲UTF8格式的,html_entity_decode在瀏覽器UTF8編碼環境下會把spa

&nbsp轉爲一個黑色四方形狀的亂碼。只有切換爲ISO-8859-1才能正確顯示爲空格。code


因此在使用html_entity_decode以前,須要先把&nbsp替換掉(str_replace),這樣就能夠避免亂碼問題。orm

示例:
htm

 對下面這段字符串直接進行HTML解碼後,會出現亂碼的問題:ci

     
$str = '真愛粉們,當時活動的一些精選片斷吧~ </font></div><div><';
$content = html_entity_decode($str);
print_r($content );


結果:字符串

先將空格 替換掉,而後再應用html_entity_decode解碼後,就不會出現問題了。

                  
$str = '真愛粉們,當時活動的一些精選片斷吧~ </font></div><div><';
 
 // 替換空隔符
 $content = str_replace(" ","[space_code]",$str);
 $content = html_entity_decode( $content );
 
 // 轉換以後,再將空格符替換回來
  $content = str_replace("[space_code]"," ",$content);
  
  print_r($content );


還有一種簡單的方法,htmlspecialchars_decode( )不用轉換空格就能夠轉化而且不出現亂碼:

     
$str = '真愛粉們,當時活動的一些精選片斷吧~ </font></div><div><';    
$content = htmlspecialchars_decode($str);
相關文章
相關標籤/搜索