2

I have this code:

<?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);

Expected output:

<F>1

Actual output:

 1

Does anyone know why start_elem() is not called here?

PS:

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

HHVM in comparison outputs:

<F>1

HHVM Version:

HipHop VM 3.1.0 (rel)
Compiler: tags/HHVM-3.1.0-0-g71ecbd8fb5e94b2a008387a2b5e9a8df5c6f5c7b
Repo schema: 88ae0db264d72ec2e2eb22ab25d717214aee568b
4

1 回答 1

-1

尝试将输出包装在htmlspecialchars. 标签正在被浏览器解析并被忽略;上面的函数会将标签转换为可显示的。

例如:

echo htmlspecialchars(xml_parse($parser, $buf, strlen($buf) == 0));
于 2018-09-25T14:22:31.520 回答