PHP - tidy_repair_string 与 tidy_parse_string、tidy_clean_repair 的区别

关于这三个函数,官方给予的介绍如下:

string tidy_repair_string (string $data[, mixed $config[, string $encoding]])

tidy tidy_parse_string (string $input[, mixed $config[, string $encoding]])
bool tidy->parseString (string $input[, mixed $config[, string $encoding]])

bool tidy_clean_repair (tidy $object)
bool tidy->cleanRepair (void)

从输入参数和返回值的类型来看,很容易得出这样的结论:tidy_repair_string 只是 tidy_parse_string + tidy_clean_repair 的简化版,省去了建立 tidy 对象的过程。而从实际使用来看,三个函数对 HTML 的整理、修复功能其实是没什么区别的;tidy_parse_string 得出的对象即使没经过 tidy_clean_repair,照样能被 echo 出来。

但是,这只是因为现在服务器上的 Tidy 模块都是 2.0 的,实际上在 1.0 时代,设计三个函数并不是那么简单的原因。对前两个函数,官方介绍里有这么一个附注:可选参数 config 和 encoding 是在 Tidy 2.0 中新加的。

1.0 时代,三个函数都是功能很单一的,很多功能都要创建完 tidy 对象才能使用,所以 tidy_parse_string 只负责打头阵,然后多次使用 tidy_setopt(此函数在 2.0 时被废除) 来逐条设置整理选项(相当于 config ),用 tidy_set_encoding(此函数在 2.0 时被废除)设置编码,最后才轮到 tidy_clean_repair 将对象还原为整理好的文本。如果直接使用 tidy_repair_string 的话,就只能用默认设置进行整理。

2.0 时代,tidy_repair_string 强大了,如果后面的程序不需要 tidy 对象的话,tidy_repair_string 完全可以单干。

另外,现在 tidyNode::get_nodes() 和 tidyNode::get_attr() 也已经被废弃,替换方案为 $tidyNode->child 与 $tidyNode->attribute 数组并需要人工判断节点类型与属性名称。
其他:
$tidyNode->name:元素的标签名(不是标签的 name 属性)
$tidyNode->id:元素的标签类型(一个数字编号,可用 Tidy 模块定义的常量代替;不是标签的 id 属性)
$tidyNode->type:节点类型,但是是由 Tidy 模块定义所定义(可以使用常量代替),而不是标准的 HTML/XML DOM 定义方式