【问题标题】:PHP DOMDocument/LIBXML replaces ( " and ' )PHP DOMDocument/LIBXML 替换 ( " 和 ' )
【发布时间】:2018-06-15 22:36:48
【问题描述】:

我正在尝试在我的 WordPress 插件中操作一些源代码,并遇到 DOMDocument 操作一些不需要的字符串和字符的问题。 Primary 我只想在特定的 id 上添加一些源代码。

这是源代码:

$doc = new \DOMDocument();
$doc->xmlStandalone = false;
$doc->encoding = 'UTF-8';
libxml_use_internal_errors( true );
$doc->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
// Add some HTML Divs and CSS classes
$html = $doc->saveHTML();

原始源代码(WordPress):

<title>WordPress &#8211; Development &#8211; </title>
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='dns-prefetch' href='//s.w.org' />
<link href='https://fonts.gstatic.com' crossorigin rel='preconnect' />
<link rel='stylesheet' id='dashicons-css'  href='http://localhost/WordPress/wp-includes/css/dashicons.min.css?ver=4.9.6' type='text/css' media='all' />

在 DOMDocument 例程之后:

<title>WordPress &ndash; Development &ndash; </title>
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//s.w.org">
<link href="https://fonts.gstatic.com" crossorigin rel="preconnect">
<link rel="stylesheet" id="dashicons-css" href="http://localhost/WordPress/wp-includes/css/dashicons.min.css?ver=4.9.6" type="text/css" media="all">

我的主要问题是他用“替换了一些',删除了“/”......

希望任何人都可以帮助我。 :-)

【问题讨论】:

  • 这些变化是否破坏了任何东西?无论哪种方式,HTML 似乎都可以正常工作。
  • 是的,这就是问题所在......不同的主题会引发错误,有时无法正确运行 JS 或解释内联代码错误原因(“/”)。
  • 奇怪,输出是 HTML5 兼容的。它是否仅适用于非常旧的浏览器?它是否可能由于其他地方的一些不相关的 HTML 错误而中断,这是由此触发的?如果输出不完全像他们认为的那样,“不同的主题”是否会在输出上执行正则表达式?
  • DOMDocument 不保存源代码,它会将其解析为 DOM 结构。所以它不记得输入是使用单引号还是双引号,它们都产生相同的结构。稍后保存时,它会生成规范格式。
  • 听起来您将输出发送到的应用程序需要 XHTML,而不是 HTML5。请参阅php.net/manual/en/domdocument.savexml.php#109416 以了解执行此操作的方法。

标签: php domdocument libxml2


【解决方案1】:

如果您的应用程序在&lt;link 标记末尾没有/&gt; 时中断,听起来它需要XHTML 而不是HTML。 PHP 文档中有一个comment,它显示了如何通过使用saveXML() 方法来获取DOMDocument 来保存XHTML。

$doc = new \DOMDocument("1.0");
$doc->xmlStandalone = false;
$doc->encoding = 'UTF-8';
libxml_use_internal_errors( true );
$doc->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
// Add some HTML Divs and CSS classes
$html = $doc->saveHTML($doc->doctype);
$html .= "\n";
$html .= $doc->saveXML($doc->documentElement);

【讨论】:

    【解决方案2】:

    不幸的是,我没能用 XHTML 方法做到这一点,尽管它给了我新的见解。

    简而言之,也许是另一个问题,还有什么可能?我想在已经加载的网站中包含一个小的 PHP Snipped。

    我有一个 WordPress 插件,它应该根据特殊的 CSS ID 从文本区域输出文本。

    Javascript 不是解决方案(但用于后备)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多