大佬教程收集整理的这篇文章主要介绍了用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试提供XHTML5.目前,我在正在处理的页面上提供XHTML 1.1 Strict.那就是我为有能力的浏览器所做的.对于那些不接受XML编码数据的人,我会严格遵循HTML4.1.
在尝试使用HTML5进行试验时,以HTML5格式交付时,所有功能或多或少都可以按预期工作.但是,作为XHTML5交付时,我遇到的第一个问题是HTML实体. FF4 sais& uuml;是未定义的实体.因为没有HTML5 DTD.
我了解到HTML5 wiki当前建议:
我确实需要& lt;& gt;在某些地方.因此,我的问题是,用PHP解码除上述五个实体之外的所有实体的最佳方法是什么. html_entity_decode()对其全部进行解码,因此是否有合理的方法排除某些内容?
更新:
目前,我采用了一种简单的替换/替换返回方法,因此,除非真的有一种优雅的方法,否则这个问题就足以解决我的迫切需求.
function non_html5_entity_decode($String)
{
$String = str_replace("&",'@@@AMP',
str_replace("'",'@@@APOS',
str_replace("<",'@@@LT',
str_replace(">",'@@@GT',
str_replace(""",'@@@QUOT',$String)))));
$String = html_entity_decode($String);
$String = str_replace('@@@AMP',"&",
str_replace('@@@APOS',"'",
str_replace('@@@LT',"<",
str_replace('@@@GT',">",
str_replace('@@@QUOT',""",$String)))));
return $String;
}
解决方法:
通用转换时要特别注意:使用带有默认参数的html_entity_decode不会删除all named entities,只有少数由旧的HTML 4.01标准定义.因此,& copy;(©)之类的实体将被转换;但有些人喜欢& plus((& plus;)).要转换所有命名的实体,请在第二个参数(!)中使用ENT_HTML5.
此外,如果目标编码不是UTF8,则无法接收上级(至255个)名称,例如& Ascr;(& Ascr;)则为119964> 255.
因此,要转换“所有可能的命名实体”,您必须使用html_entity_decode($s,ENT_HTML5,’UTF-8′),但仅对PHP5.3有效,该标志实现了ENT_HTML5.
在此问题的特定情况下,还必须使用标志ENT_NOQUOTES代替默认的ENT_COMPAT,因此,必须使用html_entity_decode($s,ENT_HTML5 | ENT_NOQUOTES,’UTF-8′)
PS(编辑):感谢@BoltClock记住有关PHP5.3的知识.
以上是大佬教程为你收集整理的用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出全部内容,希望文章能够帮你解决用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。