php 去掉实体,用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出...

我目前正在尝试提供XHTML5.目前,我在正在处理的页面上提供XHTML 1.1 Strict.那就是我为有能力的浏览器所做的.对于那些不接受XML编码数据的人,我会严格遵循HTML4.1.

在尝试使用HTML5进行试验时,以HTML5格式交付时,所有功能或多或少都可以按预期工作.但是,作为XHTML5交付时,我遇到的第一个问题是HTML实体. FF4 sais& uuml;是未定义的实体.因为没有HTML5 DTD.

我了解到HTML5 wiki当前建议:

Do not use entity references in XHTML (except for the 5 predefined entities: &, <, >, " and ')

我确实需要& 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的知识.

标签:html5,php

来源: https://codeday.me/bug/20191208/2090196.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值