当人们询问如何从网页内容/文本等中获取和提取图像的实际URL时,我已经看到了许多答案,但是,在我的数据库中,遗憾的是,我有这样的语法:
<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" />
因此,$pattern = '/src=["|\']([^"|\']+)/is';
的典型方式在我的案例中不起作用,因为那些“......
已经尝试了几个小时,我必须做一些非常错误的事情......
非常感谢任何帮助!
答案 0 :(得分:2)
首先,'常用方法'是使用HTML / XML解析器,而不是正则表达式。
其次,你所拥有的是HTML代码编码为HTML文本,由于两个原因而闻起来很糟糕:
除了这两个问题之外,你需要做的是htmlspecialchars_decode()
那些东西并通过HTML解析器传递它:
$stuff = '<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" />';
$code = htmlspecialchars_decode($stuff, ENT_QUOTES);
$xml = simplexml_load_string($code);
那就是说,对我而言,这听起来像是修复编写错误代码的黑客。但可能有一个正当理由说明为什么它首先出现在那里。
答案 1 :(得分:1)
不要使用正则表达式!
使用Simple HTML DOM之类的XML / DOM库。
BTW,您正在寻找的正则表达式是
$pattern = '/src=(["\'])(.+)(?=\1)/i';
测试用例(可选):
这是一个测试它的简单程序。显然,您需要先使用htmlspecialchars_decode()
从实体格式中对其进行解码。
$str = array(
"<script type=\"text/javascript\" src=\"script.js\"></script>",
"<script type=\"text/javascript\" src='script.js'></script>",
'<script type="text/javascript" src="script.js"></script>',
'<script type="text/javascript" src=\'script.js\'></script>',
);
$pattern = '/src=(["\'])(.+)(?=\1)/i';
foreach($str as $s){
preg_match($pattern, $s, $m);
echo $m[2], PHP_EOL;
}
输出
script.js
script.js
script.js
script.js
答案 2 :(得分:0)