使WordPress成为核心

开的9个月前

关闭5个月前

上次修改时间5个月前

#60170 关闭 增强 (固定的)

HTML API:扫描HTML文档中的每个标记。

报告人: dmsnell的简介 dmsnell公司 所有者: dmsnell的简介 dmsnell公司
里程碑: 6.5 优先: 正常的
严重程度: 正常的 版本: 6.5
组件: HTML API 关键词: has-patch接口 has-unit-测试 has-dev-注释
重点: 复写的副本:

描述

标记处理器当前访问HTML文档中的每个语法元素,但它只公开检查和修改标记。为了构建某些功能,它需要支持访问各种语法标记。在这个补丁中,HTML标记处理器公开了一个新的系统。

添加完整的代币扫描打开了新的机会,包括但不限于以下列表:

  • 的一个版本wp_truncate_html()它只解析必要的HTML,并提供保留HTML标记的能力,同时忽略它们对HTML字符串长度的贡献。主旨
  • 提高现有功能的可靠性(以及潜在性能),如wp_strip_all_tags().
  • 引入新的过滤管道,将多个过滤器合并为只在文本节点上运行的单个过程,从而跳过基于错误正则表达式的多个转换的多次迭代。
  • 将HTML呈现为文本。

此修补程序引入了可修改文本,表示HTML文档中的纯文本,该文档不能包含其他标记或语法标记。#文本节点是可修改的文本,SCRIPT或STYLE元素的内容也是可修改的,HTML注释中的文本也是可修改文本。可以在不更改HTML文档结构的情况下修改可修改的文本。

此修补程序在标记处理器上引入了新方法:

  • 获取标记类型()报告当前匹配的令牌类型,例如标记或注释。
  • 获取令牌名称()粗略报告将在浏览器中分配给节点的DOM名称。
  • 获取可修改文本()返回节点的可修改文本。。

尚未提供修改可修改文本的功能。有关新的可修改文本概念的详细描述,请参阅Github PR。

更改历史记录(22)

#1 @dmsnell公司
8个月以前

  • 里程碑已从更改等待审查6.5

#2 @dmsnell公司
8个月以前

在等待任何拦截器之前,我想在未来几天内合并它,并在合并后进行迭代。

在处理SVG元素中的CDATA部分时,存在一个已知的问题,其解决方法不明确,特别是因为浏览器处理的内容彼此不同,并且与HTML规范不同。目前采取的方法是保守的,避免了在SVG元素中包含>遇到字符。

#3 @dmsnell公司
8个月以前

  • 所有者设置为dmsnell公司
  • 分辨率设置为固定的
  • 状态已从更改新的关闭

57348:

HTML API:扫描文档中的所有语法标记,读取可修改的文本。

自从WordPress 6.2引入HTML标记处理器以来
提供了一种扫描文档中所有HTML标记的方法
然后读取并修改它们的属性。为了可靠地做到这一点
还需要了解其他类型的HTML语法,但它没有
向API的使用者公开这些语法标记。

在这个补丁中,标签处理器引入了一种新的扫描方法和
很少有helper方法可以读取每个标记的相关信息或从中读取信息。大多数
重要的是,这引入了阅读能力#文本中的节点
文档。

标签处理器有什么新功能?
================================

  • next_token()访问文档中的每个不同语法标记。
  • 获取标记类型()指示它是什么类型的令牌。
  • 获取令牌名称()返回类似的内容域名节点名称.
  • 获取可修改文本()返回与标记关联的文本。
  • 获取注释类型()指示标记表示HTML注释的原因。

示例用法。
==============

<?php程序函数strip_all_tags($html){$text_content=“”;$processor=新的WP_HTML_Tag_processor($HTML);while($processor->next_token()){if('#text'!==$processor->get_token_type()){继续;}$文本内容=$处理器->get_modifable_text();}返回$text_content;}

标签处理器有什么变化?
==================================

以前,标签处理器会扫描
每个HTML元素都是单独的。然而,现在有了特殊的标签
它只访问一次,就像那些元素是没有
更接近。

这些是特殊标记,因为其内容不包含其他HTML或
标记,仅限非HTML内容。

  • SCRIPT元素包含原始文本,该文本与HTML文档并单独输入JavaScript引擎。那里是避免在HTML中转义脚本上下文的复杂规则。内容一字不差,字符引用未解码。
  • TEXTARA和TITLE元素包含解码的纯文本显示前,例如转换&amp;进入之内&。任何标记类似标记被视为逐字文本,而不是标记。
  • IFRAME、NOEMBED、NOFRAMES、STYLE和XMP元素与textarea和title元素,但没有对字符引用进行解码。例如,&amp;内部的STYLE元素被传递给CSS引擎作为文字字符串&amp;和_not_作为&.

因为重要的是不要将此内部内容与
包含它的元素,标记处理器在扫描时将其组合
并使其内容可修改
文本(见下文)。

这意味着标记处理器将不再访问
这些元素中的任何一个,除非该标记是意外的。

<title>此行中只有一个标记<title>此行中有两个标记></title><title>此行还有两个标记>

什么是代币?
================

这里的术语“标记”是一个解析术语,它表示
HTML格式。HTML中只有几种标记:

  • 标记具有名称、属性和结束或自结束标志。
  • 文本节点,或#文本节点包含显示的纯文本在浏览器中,并在显示之前进行解码。
  • DOCTYPE声明指示如何解析文档。
  • 注释在页面上的显示中隐藏,但在HTML中显示。

HTML标记处理器将提供更多类型的标记
识别,其中一些在HTML中不作为概念存在。这些大多是
包含不属于HTML的XML语法元素(例如CDATA和
处理指令)和转换为的无效HTML语法
评论。

什么是下流评论?
========================

此修补程序以特殊方式处理特定类型的无效注释。
带有无效名称的结束标记被视为“时髦评论”
浏览器会像其他浏览器一样变成HTML注释,但
语法便于表示各种信息位
以定义良好的方式,并且不能嵌套或递归,给定
处理此无效语法的解析规则。

  • </1>
  • </%avatar_url>
  • </{“wp_bit”:{“type”:“post-author”}}>
  • </[后期作者]>
  • </__('保存帖子');>

所有这些示例都会在浏览器中变成HTML注释。内容
在古怪的内容中很容易解析,因此唯一的规则是
<并一直持续到最近的>.那里
在另一个内部不能有任何时髦的评论,因为这意味着
>在一个内部,这实际上会终止第一个。

什么是可修改文本?
========================

可修改文本类似于内部文本DOM节点的属性。
它表示可以修改的给定标记的文本范围
而不更改HTML文档或标记的结构。

目前没有更改可修改文本的机制,但
计划在稍后的补丁中提供。

标签
====

大多数标记没有可修改的文本,因为它们有子节点,其中
找到文本节点。只有上述特殊标签具有
可修改文本。

HTML中的又一天└─ 标签──────────┘└─ 文本节点─────┘└────┴─ 标签
<title>是<img>&gt<图像></标题>│      └ 可修改文本───┘       │ “是<img>><image>吗?”└─ 标签─────────────────────────────┘

文本节点
==========

文本节点是完全可修改的文本。

此HTML文档没有标记。└─ 可修改文本───────────┘

评论
========

注释内的可修改文本是注释中
没有形成它的语法。这适用于许多无效的注释。

<!-- 这是在注释-->中│   └─ 可修改文本──────┘  │└─ 注释标记───────────────┘
<!-->此无效注释没有可修改的文本。
<? 这是无效的注释-->│ └─ 可修改文本────────┘  │└─ 注释标记───────────────┘
<[CDATA[这是无效注释]]>│       └─ 可修改文本───────┘ │└─ 注释标记───────────────────┘

其他标记类型也具有可修改的文本。参考代码或测试
了解更多信息。

开发于https://github.com/WordPress/WordPress-develop/pull/5683
在中讨论https://core.trac.wordpress.org/tickt/60170

跟随[57575]

道具bernhard reiter、dlh、dmsnell、jonsrell、zieladam
修复#60170

#4 @威斯顿鲁特
8个月以前

看起来57348兰特引入了一种回归,其中不是所有的结束标记都被访问。请参见#60392.

#5 @dmsnell公司
8个月以前

@westonruter查看上面标题为标签处理器有什么变化?我还在链接的票据中留了一张便条。这些特殊标记现在以原子方式进行处理,以防止其中的内容是特殊的,并且需要特殊的规则来进行转义和解析。

#6 @dmsnell公司
8个月以前

  • 关键词 需求-开发说明补充

这张票是在采购订单号6021WordPress/WordPress-develop开发通过@dmsnell公司.


8个月以前
#7

当在WordPress/WordPress-develop中引入解析器状态时#5683,中没有任何内容搜索()方法重置解析器状态。这是有问题的,因为它可能会使解析器处于错误的状态。

在此修补程序中,解析器状态被重置,以便在连续调用next_token().

跟随[57348]
见芯-60170

Props@kevin940726用于查找和报告。

这张票是在采购订单号6021WordPress/WordPress-develop开发通过@dmsnell公司.


8个月以前
#8

  • 关键词 has-unit-测试补充

当在WordPress/WordPress-develop中引入解析器状态时#5683,中没有任何内容搜索()方法重置解析器状态。这是有问题的,因为它可能会使解析器处于错误的状态。

在此修补程序中,解析器状态被重置,以便在连续调用next_token().

跟随[57348]
见Trac票据60170

Props@kevin940726用于查找和报告。

这张票是在采购订单号6021WordPress/WordPress-develop开发通过@dmsnell公司.


8个月以前
#9

追踪票:Core-60428

当在WordPress/WordPress-develop中引入解析器状态时#5725,中没有任何内容搜索()方法重置解析器状态。这是有问题的,因为它可能会使解析器处于错误的状态。

在此修补程序中,解析器状态被重置,以便在连续调用next_token().

跟随[57211]
见Trac票据60170

Props@kevin940726用于查找和报告。

这张票是在采购订单号6021WordPress/WordPress-develop开发通过@dmsnell公司.


8个月以前
#10

追踪票:Core-60428

当在WordPress/WordPress-develop中引入解析器状态时#5725,中没有任何内容搜索()方法重置解析器状态。这是有问题的,因为它可能会使解析器处于错误的状态。

在此修补程序中,解析器状态被重置,以便在连续调用next_token().

跟随[57211]
见Trac票据60170

Props@kevin940726用于查找和报告。

#12 @萨伯恩哈特
7个月以前

  • 关键词 has-dev-注释补充;需求-开发说明远离的

这张票是在采购订单号6412WordPress/WordPress-develop开发通过@dmsnell公司.


5个月以前
#13

固定芯-60170

有趣的注释必须至少有一个字符长,但我们只检查了第一个字符的_after_结束位置。这个补丁修复了这个问题。

#14 @dmsnell公司
5个月以前

  • 分辨率 固定的删除
  • 状态已从更改关闭重新打开的

发现一个简短的“funky comments”问题,即带有单个字符长度的无效标记名的结束标记将跳过实际的结束标记>并消费另一个标签。

例如,</!><p>(第页)变成一条带有可修改文本的时髦评论!><第页

@dmsnell公司对发表了评论采购订单号6412:


5个月以前
#15

cc:@cbravobernal@dareroz我删除了一个Interactivity API测试,因为它在不应该通过的时候意外通过了。它正在测试Server Directive Processor是否会放弃不平衡的内容,除了它正在使用</ >这不是一个更贴近标签的评论,而是一个时髦的评论。那个特别古怪的评论之前没有被正确检测到,修复它破坏了测试。

@吉奥罗牌手表对发表了评论采购订单号6412:


5个月以前
#16

@dmsnell,我假设您希望在重新打开票据时在6.5.3中包含此修复程序,对吗?

@dmsnell公司对发表了评论采购订单号6412:


5个月以前
#17

在您重新打开票据时,希望在6.5.3中包含此修复程序,对吗?

@gziolo这可能是我的一个错误,但有人告诉我,如果我要为它制作bug-fix,我需要重新打开一张票。也许我误解了。人们希望用更少的Trac票来巩固更多的工作,所以我正在努力做到这一点。我应该重新买票吗?

#18 @dmsnell公司
5个月以前

  • 分辨率设置为固定的
  • 状态已从更改重新打开的关闭

58040:

HTMLAPI:修复了对单长时髦评论的检测。

[60428]标签处理器一直在错误识别单个字符
古怪的评论。它一直声称
开头之后的时髦评论必须至少有三个字符(例如。
</1>),但它已经开始寻找结束>之后
这三个字符是一样的。这意味着它一直在跳过
这些古怪的注释的实际结束并吞没了下一个语法
直到找到一个>,通常使用进程中的下一个标记。

此修补程序修复检测器并恢复查找以下令牌。

开发于https://github.com/WordPress/WordPress-develop/pull/6412
在中讨论https://core.trac.wordpress.org/tickt/60170

后续行动[60428].
修复#60170.
道具dmsnell、gziolo、jonsurerl。

@吉奥罗牌手表对发表了评论采购订单号6412:


5个月以前
#20

@aaronjorbin,如果我没弄错的话,你是6.5.x版本的领导者,你能帮我澄清一下@dmsnell在https://github.com/WordPress/WordPress-develop/pull/6412#问题评论-2074280668.

这可能是我的一个错误,但有人告诉我,如果我正在为它制作bug-fix,我需要重新打开一张票。也许我误解了。人们希望用更少的Trac票来巩固更多的工作,所以我正在努力做到这一点。我应该重新买票吗?

@约宾对发表了评论采购订单号6412:


5个月以前
#21

通常,不应重新打开已关闭里程碑上的票证,但仍应在后续提交中引用票证,以便稍后有人查看该功能时,可以看到后续工作。

这个提交消息文档谈到了如何进行此引用,但下面是一个示例

要考虑对回传进行更改,过程应该是在trac上创建一个票证,并将其放入6.5.3里程碑中。到达后,它将遵循工作流固定专业关键字表示代码已提交到主干,开发人员反馈以表明第二个提交人应该签署该协议,并且开发人员审查以证明第二委员会已经批准。

@dmsnell公司对发表了评论采购订单号6412:


5个月以前
#22

谢谢@aaronjorbin。我认为这不需要反向移植,因为这可能是一个在实践中相当罕见的错误。下次我会把票关着。

注:请参见TracTickets公司有关使用的帮助门票。