繁体   English   中英

DOMDocument中加载的模板中的PHP代码块

[英]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是否可以仅包含文件的指定部分?

如果您尝试使用PHP标记解析文档,则应删除它们,或先捕获文件的输出,然后解析它。

您可以使用ob_start()ob_get_clean();来捕获文件的输出ob_get_clean();

您可以使用正则表达式删除PHP标记:

$cleaned = preg_replace("/<\?php.*?\?>/i","",$input);

这感觉很烂,但......

$doc->loadHtml(str_replace('<?php', '&lt;?php', file_get_contents($file)));

尝试:

<div id="test" data="<?= htmlentities($somevar) ?>"> </div>

你也可以尝试htmlspecialchars() ,它是htmlentities()的“更轻”版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM