在我的 PHP 5.2.6(使用 expat-1.95.8-5)中,选项 XML_OPTION_SKIP_WHITE 没有效果。要跳过仅由空格组成的 cdata,只需在 cdata 回调函数的开头检查即可
<?php
function callback_cdata($parser, $cdata)
{
if(!trim($cdata))
return;
// ...继续处理...
}
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
xml_parser_set_option — 在 XML 解析器中设置选项
在 XML 解析器中设置选项。
parser
要设置选项的 XML 解析器的引用。
option
要设置的选项。见下文。
可用的选项如下:
选项常量 | 数据类型 | 描述 |
---|---|---|
XML_OPTION_CASE_FOLDING |
bool | 控制是否为该 XML 解析器启用大小写折叠。默认情况下启用。 |
XML_OPTION_PARSE_HUGE |
bool | 允许解析大于 10 MB 的文档。此选项应仅在文档大小有限制时启用,否则可能导致拒绝服务攻击。此选项仅在使用 libxml2 时可用。 |
XML_OPTION_SKIP_TAGSTART |
integer | 指定在标签名称的开头应跳过多少个字符。 |
XML_OPTION_SKIP_WHITE |
bool | 是否跳过由空格字符组成的值。 |
XML_OPTION_TARGET_ENCODING |
string | 设置在此 XML 解析器中使用的目标编码。xml_parser_create()默认情况下设置为与源编码相同。支持的目标编码为ISO-8859-1 、US-ASCII 和UTF-8 。 |
value
选项的新值。
当将无效值传递给option
时,会抛出ValueError。
在 PHP 8.0.0 之前,如果将无效值传递给option
,该函数将返回 false,同时还会生成E_WARNING
,并使函数返回false
。
版本 | 描述 |
---|---|
8.4.0 | 添加了选项XML_OPTION_PARSE_HUGE 。 |
8.3.0 | value 参数现在也接受布尔值。选项XML_OPTION_CASE_FOLDING 和XML_OPTION_SKIP_WHITE 现在是布尔选项。 |
8.0.0 |
parser 现在期望一个XMLParser实例;以前,期望的是有效的xml resource。 |
8.0.0 | 如果option 无效,现在会抛出ValueError。 |
在我的 PHP 5.2.6(使用 expat-1.95.8-5)中,选项 XML_OPTION_SKIP_WHITE 没有效果。要跳过仅由空格组成的 cdata,只需在 cdata 回调函数的开头检查即可
<?php
function callback_cdata($parser, $cdata)
{
if(!trim($cdata))
return;
// ...继续处理...
}
?>
XML 区分大小写,因此,在我看来,禁用大小写折叠并不违反 xml 1.0 规范,相反,禁用大小写折叠允许我们区分相同字母的不同大小写('a' 和 'A'),在 XML 中它们是两个不同的东西。
在我看来,禁用大小写折叠是一种良好的实践,我认为它应该默认禁用。
更多信息请访问
http://www.isacat.net/2001/xml/case.htm
和
http://www.w3.org/TR/REC-xml
谢谢。
在下面的函数中,如果您不希望 php 抛出警告,则需要更新两行。
将这两行
$elements[$index]['attributes'] = $tag['attributes'];
$elements[$index]['content'] = $tag['value'];
更改为
$elements[$index]['attributes'] = empty($tag['attributes']) ? "" : $tag['attributes'];
$elements[$index]['content'] = empty($tag['value']) ? "" : $tag['value'];