栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

html_entity_decode上的ENT_HTML5,ENT_HTML401,…修饰符有什么作用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

html_entity_decode上的ENT_HTML5,ENT_HTML401,…修饰符有什么作用?

当我在htmlspecialchars页面上看到这些常量时,我​​开始怀疑这些常量的行为。该文档是垃圾,因此我开始研究PHP的源代码。

基本上,这些常数会影响某些实体是否已编码(或解码

html_entity_depre
)。最明显的影响是撇号(
'
)是编码为
'
(for
ENT_HTML401
)还是
'
(for
other)。同样,它确定使用时是否
'
已解码
html_entity_depre
。(
'
始终被解码)。

所有用法都可以在ext / standard / html.c及其头文件中找到。从ext / standard / html.h:

#define ENT_HTML_DOC_HTML401 0#define ENT_HTML_DOC_XML1 16#define ENT_HTML_DOC_XHTML32#define ENT_HTML_DOC_HTML5(16|32)

(替换

ENT_HTML_DOC_
ENT_
得到他们的PHP常量名)

我开始寻找这些常量的所有出现情况,并且可以就

ENT_*
常量的行为共享以下内容:

  • 它影响哪些数字实体将被解码或不被解码。例如,
    
    被解码为不可读/无效字符
    ENT_HTML401
    ,和
    ENT_XHTML
    ENT_XML1
    。对于
    ENT_HTML5
    然而,这被视为无效字符,因此它停留
    
    。(C函数unipre_cp_is_allowed)
  • ENT_SUBSTITUTE
    启用,无效的代码单元序列中 用于一个指定的字符集 被替换
    。(不取决于文档类型!)
  • ENT_DISALLOWED
    启用,代码点 被禁止指定文档类型 将被替换
    。(不取决于字符集!)
  • 使用
    ENT_IGNORE
    ENT_SUBSTITUTE
    删除相同的无效代码单元序列,并且不进行替换(例如,取决于“文档类型”的选择
    ENT_HTML5
  • 禁止
    
    ENT_HTML5
    (线976)
  • ENT_XHTML
    与共享实体图
    ENT_HTML401
    。唯一的区别是
    '
    它将转换为单引号,
    ENT_XHTML
    而while
    ENT_HTML401
    不会将其转换(请参见此行)
  • ENT_HTML401
    ENT_XHTML
    使用完全相同的实体图(减去上一点的差异)。
    ENT_HTML5
    使用自己的地图。其他(目前
    ENT_XML1
    )具有非常有限的解码图(
    >
    &
    <
    '
    "
    和它们的数字等同物)。(请参见C函数unescape_inverse_map)
  • 关于前一点的注意事项:当仅几个实体必须转义(认为
    htmlspecialchars
    )时
    ENT_XML1
    ,除之外,所有实体映射将使用与相同的实体
    ENT_HTML401
    。那一个不会用
    '
    ,但是
    '

这几乎涵盖了所有内容。我不会列出所有实体差异,而是要针对一些包含以下内容的文本文件指向https://github.com/php/php-
src/tree/php-5.4.11/ext/standard/html_tables
每种类型的映射。

htmlspecialchars应该使用什么ENT_ *?

当使用

htmlspecialchars
与ENT_COMPAT(默认)或ENT_NOQUOTES,这不要紧,你挑(见下文)之一。我在SO上看到了一些答案,可以归结为:

<input value="<?php echo htmlspecialchars($str, ENT_HTML5);?>" >

这是 不安全的 。它将覆盖默认值

ENT_HTML401 | ENT_COMPAT
,其具有的区别在于HTML5实体使用,但
认为引号不再逃脱!另外,这是冗余代码。必须由被编码的实体
htmlspecialchars
是所有相同的
ENT_HTML401
ENT_HTML5

只需使用

ENT_COMPAT
ENT_QUOTES
代替。当您对属性使用撇号(
value='foo'
)时,后者也适用。如果您只有的两个参数
htmlspecialchars
,则不要包含任何参数,因为它是默认参数(
ENT_HTML401
为0,还记得吗?)。

如果要在页面上打印某些内容(在标签之间,而不是属性之间),则选择哪一个都没有关系,因为它具有相同的效果。使用

ENT_NOQUOTES |ENT_HTML401
等于数字值甚至足够
0

另请参阅以下有关ENT_SUBTITUTE和ENT_DISALLOWED的信息。

我应该为htmlentities使用哪个ENT_ *?

如果您的文本编辑器或数据库太笨拙,以致您不能包含非US-
ASCII字符(例如UTF-8),则可以使用htmlentities。否则,请保存一些字节并改用htmlspecialchars(请参见上文)。

无论您需要使用

ENT_HTML401
ENT_HTML5
或别的东西取决于你的页面是如何提供服务。当您有HTML5页面(
<!doctypehtml>
)时,请使用
ENT_HTML5
。XHTML或XML?使用相应的
ENT_XHTML
ENT_XML1
。如果没有doctype或纯HTML4,请使用
ENT_HTML401
(省略时是默认值)。

我应该使用ENT_DISALLOWED,ENT_IGNORE还是ENT_SUBSTITUTE?

默认情况下,将删除 对给定字符集无效的
字节序列。要

代替无效的字节序列,请指定
ENT_SUBSTITUTE
。(请注意,这
&#FFFD;
是针对非UTF-8字符集显示的)。
ENT_IGNORE
但是,当您指定时,即使指定,也不会显示这些字符
ENT_SUBSTITUTE

指定时, 文档类型的
无效字符将被上述相同的替换字符(或其实体)替换

ENT_DISALLOWED
。无论是否进行
ENT_IGNORE
设置,都会发生这种情况(这与文档类型的无效字符无关)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号