【问题标题】:PHP - parsing src attribute of <img> tag in stringPHP - 解析字符串中 <img> 标记的 src 属性
【发布时间】:2017-04-08 15:12:23
【问题描述】:

解析任意文本字符串中第一个&lt;img&gt; 标记的src 属性但不使用任何外部库的最简单但可靠的方法是什么?这意味着获取 &lt;img&gt; 标签的 src 属性的打开和关闭 " 字符之间的所有内容。


我做了这个脚本,但在某些情况下它不是一个可靠的解决方案:

  $string = $item['description'];
  $arr = explode('img', $string);
  $arr = explode('src', $arr[1]);
  $arr = explode('=', $arr[1]);
  $arr = explode('>', $arr[1]);

  $pos1 = strpos($arr[0], '"')+1;
  $pos2 = strrpos($arr[0], '"')-1;

  if (!$pos1) {
    $pos1 = strpos($arr[0], "'")+1;
    $pos2 = strrpos($arr[0], "'")-1;
  }

  if ($pos1 && $pos2) { 
    $result = substr($arr[0], $pos1, $pos2); 
  }
  else { $result = null; }

【问题讨论】:

  • DOMDocument 不是外部库,为什么不用呢?使用getElementsByTagName(),抓住第一个项目,然后得到src$img-&gt;getAttribute('src')
  • DOMDocument 可能在某些服务器上不可用?
  • DOMDocument 是 PHP 内置类。
  • 好的,会试试的,谢谢

标签: php regex parsing src


【解决方案1】:

唯一最安全的方法是使用 DOMDocument 内置(在 PHP 5 中)类。使用getElementsByTagName(),检查长度是否大于0,用getAttribute('src')抓取第一项src值:

$html = "YOUR_HTML_STRING";
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$imgs = $dom->getElementsByTagName('img');
if ($imgs->length > 0) {
    echo $imgs->item(0)->getAttribute('src');
}

this PHP demo

【讨论】:

    【解决方案2】:

    这是你的答案: 首先,你需要调用这个正则表达式,

    <img(.*?)>
    

    然后,为了获取其他属性,你需要对之前的结果进行另一个正则表达式调用

    "(.*?)"
    

    【讨论】:

    • 标签中是否还有其他属性?
    【解决方案3】:

    试试这个,

    <img\s+src\s?\=\s?\"(https?\:\/\/[\w\.\/]+)\".*\/>
    

    【讨论】:

      【解决方案4】:

      如果要获取img标签所有属性的值,需要做2个正则表达式。

      1.获取img标签的内容:

      /<\s*img([^<>]+)>/
      
      1. 然后使用函数preg_match_all() 对捕获的内容使用此正则表达式

        /\S+\s*=\s*[\'\"]([^\"\']+)[\'\"]/g

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 2013-07-16
        • 2015-06-02
        • 2020-02-25
        • 2016-01-19
        • 2015-03-22
        • 1970-01-01
        相关资源
        最近更新 更多