仅从包含<img/>标记的字符串中提取文件名

时间:2014-01-23 13:58:21

标签: php

“将此视为示例并从此字符串中提取图像名称”(此部分也包含在问题中。“

<img src='http://www.example.com/Imagename.jpg' height='400px' width='600px'>

-------&GT; 处理上面提供的材料以及句子......我有字符串和标签的组合......我想从所有这些东西中只提取文件名。

怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用简单的正则表达式从字符串中获取,或使用SimpleXMLElement

实施例

<?php

$input = "<img src='http://www.example.com/Imagename.jpg' height='400px' width='600px' />";

$element= new SimpleXMLElement($input);
var_dump(basename((string) $element->attributes()->src));

将输出所需的结果:string 'Imagename.jpg' (length=13)

使用正则表达式的示例(我建议使用像我发布的那样使用DOM或SimpleXMLElement),但是,如果你想要一个更简单的方法,比如使用简单的正则表达式,你可以这样做:

<?php

preg_match("/src='(?P<url>([^']*?))'/", $input, $matches);
$filename = isset($matches['url']) ? basename($matches['url']) : null;

var_dump($filename);

它将产生相同的输出。

如果您想要废弃所有HTML,那么这是一个完整的示例,您可以这样做:

<?php

$html = <<<HTML
<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
</head>
<body>
lalala 
<img src='http://www.example.com/Imagename.jpg' height='400px' width='600px' />
</body>
</html>
HTML;

function withEachImage ($html, callable $callback) {
   libxml_use_internal_errors(true);

  $document = new DOMDocument();
  $document->loadHTML($html);

  foreach ($document->getElementsByTagName('img') as $img) {
    call_user_func_array($callback, array($img->getAttribute('src')));
  }
}

withEachImage($html, function ($src) {
  echo basename($src);
});

答案 1 :(得分:0)

有很多方法可以做到这一点,假设图像文件名可以改变,或者你可以在“和”之间交替,这就是我要做的事情;

function getFileName($myImage){
$myArray = explode(" ",$myImage);
$subArray = explode("/",$myArray[1]);
return substr($subArray[count($subArray)-1],0,-1);
}


$source = "<img src='http://www.example.com/Imagename.jpg' height='400px' width='600px'>";
$myImg = getFileName($source);

print $myImg;

代码已经过测试并且有效

输出:Imagename.jpg

你甚至可以检查'src',所以它与参数的顺序无关:

function getFileName($myImage){
$myArray = explode(" ",$myImage);
$useKey = 0;
foreach($myArray as $key => $value){
  if(substr($value,0,3)=="src"){
    $useKey = $key;
  }
}
$subArray = explode("/",$myArray[$useKey]);
return substr($subArray[count($subArray)-1],0,-1);
}


$source = "<img height='400px' src='http://www.example.com/Imagename.jpg' width='600px'>";
$myImg = getFileName($source);

print $myImg;