【问题标题】:How to get html tag from string in php?如何从php中的字符串获取html标签?
【发布时间】:2011-08-21 21:07:21
【问题描述】:

我有一个从 RSS 提要中提取的 html 输出,它是这样的:

<div>
    <p>
        Some text
    </p>
    <iframe src="http://www.source.com"></iframe>
</div>

问题是我只需要 iframe 标签的 attr "src",有没有办法用 PHP 来获取它?可能是正则表达式?

提前致谢!

【问题讨论】:

    标签: php html dom iframe


    【解决方案1】:

    如果您始终只获得上面列出的数据,则可以使用简单的子字符串,使用 src=""&gt;&lt;iframe 的字符串位置来指定您想要的子字符串:

    $html = '<div><p>Some text</p><iframe src="http://www.source.com"></iframe></div>';
    
    $start = strpos($html, 'src="') + 5;
    $length = strpos($html, '"></iframe') - $start;
    $src = substr($html, $start, $length);
    
    echo $src;
    

    EDIT - 修复代码并拆分为多行。这很容易成为单行,但是 - 认为如果我分成多行更容易理解。

    【讨论】:

      【解决方案2】:

      我推荐DOMDocumentSimpleXML

      这样的事情可能会给你这个想法。

      var_dump(simplexml_load_string($rss_feed));
      

      【讨论】:

      • 如果 HTML 的格式不完美,我认为 DOMDocument 会比 SimpleXML 更健壮一些。另外,我猜你必须分别处理 RSS 和它包含的 HTML,因为 HTML 应该被编码为实体以使 RSS 正确。
      • 如果您只需要src 属性,则不需要更强大的。 IMO,SimpleXML 的 simple 特性在这种情况下是正确的。
      • 正如我所说,我担心的是 HTML 是无效的 XML。如果您仍然认为这比仅使用自动更正错误 HTML 的 DOMDocument 更容易,请查看此 SO 帖子 stackoverflow.com/questions/2890120/php-processing-invalid-xml
      【解决方案3】:

      我不是正则表达式专家,但另一种方法是在 " 标记上使用 explode 并像这样得到 array[1]

      $rssFeed = '<div>
          <p>
              Some text
          </p>
          <iframe src="http://www.source.com"></iframe>
      </div>';
      
      $rssArray = explode('"', $rssFeed);
      
      echo $rssArray[1];
      

      这要求您的 RSS 提要非常一致,但如果“某些文本”部分包含 " 标记,这会搞砸并且您会得到错误的字符串。

      您可以在数组中查看以httpwww 开头的所有内容以解决错误,但同样,它需要非常一致的 RSS 提要,因此您必须自己判断这是否可以完成工作足够好。

      【讨论】:

        【解决方案4】:

        你可以用一个小的命令行 perl 脚本来解析这个输出。这可能非常健壮,具体取决于您制作正则表达式的通用程度。

        例如,

        $command = "echo your_html_output | perl -pe 's/src=\"(.*)\"/$1/'"; # Capture what is in between src=" and the " (the closing quote)

        $output = shell_exec("$command");

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-19
          • 2010-10-24
          • 2012-11-07
          • 1970-01-01
          • 1970-01-01
          • 2013-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多