【问题标题】:Wired HTML DOM produced by PHPPHP 生成的有线 HTML DOM
【发布时间】:2016-11-25 18:43:20
【问题描述】:

我正在使用此代码检索博客的 rss 提要

<?php     
$xml = ("https://serembangirl.wordpress.com/feed/");
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<=5; $i++) {
    $item_title=$x->item($i)->getElementsByTagName('title')
    ->item(0)->childNodes->item(0)->nodeValue;

    $item_link=$x->item($i)->getElementsByTagName('link')
        ->item(0)->childNodes->item(0)->nodeValue;

    $item_desc=$x->item($i)->getElementsByTagName('description')
        ->item(0)->childNodes->item(0)->nodeValue;

    $item_content=$x->item($i)->getElementsByTagName('encoded')->item(0)->nodeValue;
?>

<a href='#'>
    <div class="card">
        <div class='inner'>
            <p class='title'>
            <?php echo $item_title;?>
            </p>
            <p class='desc'> <?php echo $item_desc; ?> </p>
        </div>
    </div>
</a>
<?php } ?>

使用上面的代码,据说应该包装,但它产生了这个:

http://i.imgur.com/YspeRe3.png

解决这个问题我真的摸不着头脑。

【问题讨论】:

    标签: php html


    【解决方案1】:

    我认为不推荐使用锚标签中的 div。

    【讨论】:

      【解决方案2】:

      检查 PHP 生成的实际源代码。它将在a 中包含div

      divp 或其他块级元素不允许在 a 元素内。浏览器会尝试“修复”您的文档。

      提示 1

      使用 XPath 从 DOM 中获取数据。

      $xpath = new DOMXPath($xmlDoc);
      foreach ($xpath->evaluate('//item') as $item) {
        $item_title = $xpath->evaluate('string(title)', $item);
        // ...
      }
      

      提示 2

      如果您将数据输出为 HTML 源,请不要忘记转义。

      ...
      <p class='title'>
        <?php echo htmlspecialchars($item_title); ?>
      </p>
      ...
      

      【讨论】:

      • 我可以转义标题,但 $content 呢?
      • 剥离标签并将其转义。或者将其加载到 DOM 中并使用白名单进行清理。
      猜你喜欢
      • 2012-05-04
      • 1970-01-01
      • 2014-05-28
      • 2013-07-04
      • 2012-03-25
      • 2011-12-31
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多