[英]PHP-code blocks in templates loaded in DOMDocument
我需要用DOMDocument解析HTML模板。 但HTML代码可能包含PHP代码块,例如:
<div id="test" data="<?php echo $somevar?>"> </div>
当我加载这个HTML时,我得到错误“Unescaped'<'不允许在属性值...”。 Parser认为属性“data”没有结束引用而<php是新标记。 如何指定忽略<php标签或类似的东西?
您的HTML代码:
<div id="test" data="<?php echo $somevar?>"> </div>
不是XML代码。 对于XML,它是无效的,HTML是可以的。 要使用DOMDocument加载HTML代码,您可以使用DOMDocument::loadHTML
Docs函数。
它将加载您的模板,没有任何错误。
示例/ 演示 :
$html = '<div id="test" data="<?php echo $somevar?>"> </div>';
$doc = new DOMDocument();
$doc->loadHTML($html);
如果您尝试使用PHP标记解析文档,则应删除它们,或先捕获文件的输出,然后解析它。
您可以使用ob_start()
和ob_get_clean();
来捕获文件的输出ob_get_clean();
。
您可以使用正则表达式删除PHP标记:
$cleaned = preg_replace("/<\?php.*?\?>/i","",$input);
这感觉很烂,但......
$doc->loadHtml(str_replace('<?php', '<?php', file_get_contents($file)));
尝试:
<div id="test" data="<?= htmlentities($somevar) ?>"> </div>
你也可以尝试htmlspecialchars()
,它是htmlentities()
的“更轻”版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.