关于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);
相关文章
相关标签/搜索