【问题标题】:A correct way to store html page in a PHP variable, parse and show it将html页面存储在PHP变量中,解析并显示它的正确方法
【发布时间】:2017-10-27 12:13:12
【问题描述】:

实际上是使用 simple_html_dom 解析器来解析一个 html 页面。然后做了一些修改。现在想在我的页面中显示它。

$page = file_get_html($url);
foreach($page->find('div#someDIv') as $e) {
    $e->style = 'display:none;';
}

foreach($page->find('td#Something') as $e) {
    $e->style = 'display:none;';
}
foreach($page->find('td#Something2') as $e) {
    $e->style = 'display:none;';
}

$page->save();

?>

现在我回应并展示它,

<?php echo $page; ?>

内容显示正确,但我看到一些 java 脚本错误阻止我剩余的​​脚本执行。

我看到的错误是

未捕获的 SyntaxError:无效或意外令牌

Uncaught SyntaxError: Unexpected end of input

这些错误在我 echo $page 所在的那一行

有没有更好的方法来显示内容,这样可以防止这些错误并且可以执行它下面的javascript。

更新: 我在这里看到错误,

【问题讨论】:

  • 你应该显示渲染的输出(至少是导致错误的部分)
  • 请注意,如果您检索带有脚本的 html 元素,它们在逻辑上可能会由于各种原因引发错误,例如未定义变量、缺少框架、缺少 html 元素等。根据具体情况,您可以简单地删除脚本标签
  • @PatrickQ 更新了错误部分。
  • @PatrickQ ; 正在结束这一行。如何预防。

标签: javascript php html simple-html-dom


【解决方案1】:

PHP 有自己的类来处理 HTML dom,称为 DOMDocument。 你的例子:

$doc = new DOMDocument(); 
$doc->loadHTMLFile($url);

要查找 dom 元素,请使用 XPath

$xpath = new DOMXpath($doc);

$elements = $xpath->query("*/td[@id='Something']");
if (!is_null($elements)) {
  foreach ($elements as $element) {
     $element.setAttribute('style','display: none;');
  }
}

echo $doc->saveHTML();

【讨论】:

  • 这可以用来保存嵌入代码,例如youtube吗?很抱歉劫持了这个,但我需要保存并显示代码,但我担心可能会插入 javascript 或其他东西。
  • 此代码生成有效的 HTML,如果页面包含来自服务器的脚本,您将收到如下错误:Uncaught SyntaxError: Invalid or unexpected token, Uncaught SyntaxError: What u need with embedded video?跨度>
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 2016-09-23
  • 2015-12-30
  • 2012-11-05
  • 2014-10-24
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多