如何使用PHP抓取标记,检查图像是否存在并替换不存在的路径?
我有一些标记,需要对图像进行爬网,并检查图像是否存在于它们指定的路径中。如果位置A中不存在图像,则应将路径替换为位置B如何使用PHP抓取标记,检查图像是否存在并替换不存在的路径?,php,Php,我有一些标记,需要对图像进行爬网,并检查图像是否存在于它们指定的路径中。如果位置A中不存在图像,则应将路径替换为位置B 我想知道实现这一点最有效的方法是什么?您可以在这里使用正则表达式。创建一个正则表达式以匹配 您必须提供ImageExists()函数和正确的正则表达式。您可以在此处使用正则表达式。创建一个正则表达式以匹配 您必须提供ImageExists()函数和正确的正则表达式。使用PHP的。它很容易使用。下面是一个例子(可能不起作用,但你知道了): 使用PHP的。它很容易使用。下面是一个
我想知道实现这一点最有效的方法是什么?您可以在这里使用正则表达式。创建一个正则表达式以匹配
您必须提供ImageExists()
函数和正确的正则表达式。您可以在此处使用正则表达式。创建一个正则表达式以匹配
您必须提供ImageExists()
函数和正确的正则表达式。使用PHP的。它很容易使用。下面是一个例子(可能不起作用,但你知道了):
使用PHP的。它很容易使用。下面是一个例子(可能不起作用,但你知道了):
(相关)是您的标记还是您为什么需要这样做?为什么不能在生成标记之前检查图像是否存在?因为标记不是由PHP生成的,它是手工编写的。标记由PHP抓取,然后在另一个位置运行,因此图像路径不同。我不想使用绝对路径或只是更改每个路径的原因是,我希望在应用程序的基础上保留图像的简单“重载”;如果应用程序没有图片X,则将路径重定向到公共位置,所有默认图片都在该位置。(相关)是您的标记还是您为什么需要这样做?为什么不能在生成标记之前检查图像是否存在?因为标记不是由PHP生成的,它是手工编写的。标记由PHP抓取,然后在另一个位置运行,因此图像路径不同。我不想使用绝对路径或只是更改每个路径的原因是,我希望在应用程序的基础上保留图像的简单“重载”;如果应用程序没有图片X,则将路径重定向到公共位置,其中包含所有默认图片。他可以使用文件\u get\u contents($image\u url)检查文件是否存在。谢谢!我完全忘记了多姆。我比SimpleXML更多地使用它,但我在几个月的时间里放弃了编写PHP。我希望他们能为最好的DOM解析器选择一个更吸引人的名字……啊。DOM文档似乎正是我需要的!除了DOMDocument在那里填充DOCTYPE、html和body标记,当我只加载文档片段时。。。然后,标记被JSON编码到文档中并传输到请求的客户端,在许多情况下,这会使标记有效负载增加一倍(当标记非常简单时),这并不是很好,特别是当应用程序针对移动使用时,每个字节都很重要。通过添加额外的DIV包装器并只获取该DIV的内容,他就可以使用file\u get\u contents($image\u url)来检查文件是否存在。谢谢!我完全忘记了多姆。我比SimpleXML更多地使用它,但我在几个月的时间里放弃了编写PHP。我希望他们能为最好的DOM解析器选择一个更吸引人的名字……啊。DOM文档似乎正是我需要的!除了DOMDocument在那里填充DOCTYPE、html和body标记,当我只加载文档片段时。。。然后,标记被JSON编码到文档中并传输到请求的客户端,在许多情况下,这会使标记有效负载增加一倍(当标记非常简单时),这并不是很好,特别是当应用程序针对移动使用时,每个字节都有计数。通过添加额外的DIV包装器并只获取该DIV的内容的简单方法解决了这个问题。这是不可靠的。如果图像的编写方式与您的模式不完全相同怎么办?我也同意:如果在src=
之前有alt=
属性,会发生什么情况?你也必须把它包括进去。。。不过,如果HTML标记在所有文档中都是一致的,这就行了。听起来这正是我需要的。啊!然而,有没有一种方法可以让模式捕获src,即使src之前有alt、id等标记?遗憾的是,对于正则表达式,我自己也没什么用处/@所有人:我说过你必须滚动你自己的正则表达式。这只是一个例子:)这是不可靠的。如果图像的编写方式与您的模式不完全相同怎么办?我也同意:如果在src=
之前有alt=
属性,会发生什么情况?你也必须把它包括进去。。。不过,如果HTML标记在所有文档中都是一致的,这就行了。听起来这正是我需要的。啊!然而,有没有一种方法可以让模式捕获src,即使src之前有alt、id等标记?遗憾的是,对于正则表达式,我自己也没什么用处/@所有人:我说过你必须滚动你自己的正则表达式。这只是一个例子:)
$htmlContent = Preg_Replace_Callback (
'/<img src="(.*)"/is',
function ( $matches ) {
if ( ImageExists ( $matches[1] ) )
return $matches[1];
else
return '/path/to/some/other/image.jpg';
},
$htmlContent
);
<?php
$document = simplexml_load_file('dah_file.html');
foreach ($document->children() as $child)
{
if !file_exists($child['src'])
{
$child['src'] = 'path/to/image.png';
}
}
print($document->asXml());
?>