Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:xml_解析和xml_集合_元素_处理程序_Php_Xml_Hhvm - Fatal编程技术网

PHP:xml_解析和xml_集合_元素_处理程序

PHP:xml_解析和xml_集合_元素_处理程序,php,xml,hhvm,Php,Xml,Hhvm,我有以下代码: <?php function start_elem($parser,$name,$attribs) { echo "<$name>"; } function end_elem($parser,$name) { echo "</$name>"; } $parser=xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_set_e

我有以下代码:

<?php
function start_elem($parser,$name,$attribs) {
   echo "<$name>";
}
function end_elem($parser,$name)
{
   echo "</$name>";
}

$parser=xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($parser,"start_elem","end_elem");
$buf = '<F>';
echo xml_parse($parser,$buf,strlen($buf)==0);
有人知道为什么这里不调用start_elem()吗

附言:

HHVM比较输出:

<F>1

尝试将输出包装到中。浏览器正在分析标记并将其忽略;上述功能将标签转换为可显示

例如:

echo htmlspecialchars(xml_parse($parser,$buf,strlen($buf)==0);

尝试将输出包装到中。浏览器正在分析标记并将其忽略;上述功能将标签转换为可显示

例如:

echo htmlspecialchars(xml_parse($parser,$buf,strlen($buf)==0);

另请参见:POSIX文本文件应具有行结尾。在缓冲区中,该行结尾缺失,这就是为什么在到达EOF(EOB)之前打开但从未关闭的元素会因为数据缺失而从输入序列中删除。您也可以只附加一个空格或另一个不同的字符,使解析器的内部状态至少改变一个字符,使其知道您的字符串应该是一个元素。顺便说一句,您的输入不是XML。您可能希望使其像解析器支持的那样自动关闭。@hakre感谢您的输入。这可能是这个问题的一种可能性。我无法控制输入(它是PHP/Java桥的一部分),所以我知道它不是XML。主要的问题是,PHP和HHVM对待输入的方式不同。首先用Tidy修复XML(或者只附加一个LF,这样做很容易)。我想说的是,HHVM是否对待这种非XML的区别更为深奥,因为数据不是XML。你可以严格报告这一点,但我可以用PHP和HHVM重现这种行为,所以我认为这实际上不是HHVM问题。不,不可能用Tidy修复XML,因为它是我无法控制的数据通信协议的一部分。PHP和HHVM的输出相同吗?如果是,您使用的是哪个版本?另请参阅:POSIX文本文件应该有一行结尾。在缓冲区中,该行结尾缺失,这就是为什么在到达EOF(EOB)之前打开但从未关闭的元素会因为数据缺失而从输入序列中删除。您也可以只附加一个空格或另一个不同的字符,使解析器的内部状态至少改变一个字符,使其知道您的字符串应该是一个元素。顺便说一句,您的输入不是XML。您可能希望使其像解析器支持的那样自动关闭。@hakre感谢您的输入。这可能是这个问题的一种可能性。我无法控制输入(它是PHP/Java桥的一部分),所以我知道它不是XML。主要的问题是,PHP和HHVM对待输入的方式不同。首先用Tidy修复XML(或者只附加一个LF,这样做很容易)。我想说的是,HHVM是否对待这种非XML的区别更为深奥,因为数据不是XML。你可以严格报告这一点,但我可以用PHP和HHVM重现这种行为,所以我认为这实际上不是HHVM问题。不,不可能用Tidy修复XML,因为它是我无法控制的数据通信协议的一部分。PHP和HHVM的输出相同吗?如果是的话,您使用的是哪种版本?很遗憾,这与我提出的问题无关。这种差异可以归结为HHVM和PHP中XML解析器的不同实现,而HHVM中似乎无法修复这种差异。不幸的是,这与我提出的问题无关。这种差异可以归结为HHVM和PHP中XML解析器的不同实现,而HHVM中似乎无法修复这种差异。
 1
php --version
PHP 5.4.4-14+deb7u7 (cli) (built: Dec 12 2013 08:42:07)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with XCache v2.0.0, Copyright (c) 2005-2012, by mOo
<F>1
HipHop VM 3.1.0 (rel)
Compiler: tags/HHVM-3.1.0-0-g71ecbd8fb5e94b2a008387a2b5e9a8df5c6f5c7b
Repo schema: 88ae0db264d72ec2e2eb22ab25d717214aee568b