如何使用 if/not 有条件地 str_replace 文本
How to str_replace text conditionally with if/not
在为其 html 抓取网页后,我需要有条件地替换文本以更正资源和媒体的链接。
我需要通过将 'href="/' 替换为 'href="http://example.com/' 来替换本地链接,这样链接才能正常工作,但同时排除 'href="//' 之类的链接,这些链接将指向未使用的异地资源“http:/https:”用于兼容和不兼容 SSL。所以...
如果'href="/'或'href=/'
但如果 'href="//' 或 'href=//'
这并没有取代任何东西...
$html = str_replace('href="?/(?!/)', $url, $html);
与此同时,我首先替换 //:
$html = str_replace('href="//', 'href="https://', $html);
$html = str_replace('href=//', 'href=https://', $html);
您需要使用 preg_replace
进行正则表达式替换,而不是 str_replace
:
$tests = array("<a href=\"/", "<a href=/", "<a href=\"//", "<a href=//");
$pattern = '/href=("?)\/(?!\/)/';
foreach ($tests as $test) {
echo preg_replace($pattern, "href=\1http://example.com/", $test);
echo "\n";
}
输出:
<a href="http://example.com/
<a href=http://example.com/
<a href="//
<a href=//
在为其 html 抓取网页后,我需要有条件地替换文本以更正资源和媒体的链接。
我需要通过将 'href="/' 替换为 'href="http://example.com/' 来替换本地链接,这样链接才能正常工作,但同时排除 'href="//' 之类的链接,这些链接将指向未使用的异地资源“http:/https:”用于兼容和不兼容 SSL。所以...
如果'href="/'或'href=/'
但如果 'href="//' 或 'href=//'
这并没有取代任何东西...
$html = str_replace('href="?/(?!/)', $url, $html);
与此同时,我首先替换 //:
$html = str_replace('href="//', 'href="https://', $html);
$html = str_replace('href=//', 'href=https://', $html);
您需要使用 preg_replace
进行正则表达式替换,而不是 str_replace
:
$tests = array("<a href=\"/", "<a href=/", "<a href=\"//", "<a href=//");
$pattern = '/href=("?)\/(?!\/)/';
foreach ($tests as $test) {
echo preg_replace($pattern, "href=\1http://example.com/", $test);
echo "\n";
}
输出:
<a href="http://example.com/
<a href=http://example.com/
<a href="//
<a href=//