如何将字符串中的 http 替换为 https 但仅限于 PHP 中的特定域
How to replace http for https in string but only on specific domains in PHP
我需要解析 html 内容的字符串,并在可能的情况下用 https 替换其他域上图像的 url,无论它们是 http。问题是并非所有外部域都支持 https,因此我无法将 http 替换为 https。
所以我想使用我知道可以使用 https 的域列表来执行此操作。
如果 www.有没有加。
使用@Wiktor 给出的示例,我有一些接近我想要的东西,但这需要反转到 运行 找到匹配时的替换,而不是找不到匹配时的替换,因为此代码当前功能。
/http(?!:\/\/(?:[^\/]+\.)?(?:example\.com|main\.com)\b)/i
我相信你可以使用
$domains = array("example.com", "main.com");
$s = "http://example.com http://main.main.com http://let.com";
$re = '/http(?=:\/\/(?:[^\/]+\.)?(?:'
. implode("|", array_map(function ($x) {
return preg_quote($x);
}, $domains))
. ')\b)/i';
echo preg_replace($re, "https", $s);
// => https://example.com https://main.main.com http://let.com
正则表达式匹配:
http
- http
只有后跟...
(?=
- 正先行开始
:\/\/
- ://
文字子串
(?:[^\/]+\.)?
- 除了 /
和 .
之外的 1+ 个字符的可选序列
(?:
+ implode
代码 - 创建一个交替组转义单独的文字分支(以匹配任何一个替代方案,example
或 main
等)
)
- 交替组结束
\b
- 单词边界
)
- 前瞻结束
/i
- 不区分大小写的修饰符。
我需要解析 html 内容的字符串,并在可能的情况下用 https 替换其他域上图像的 url,无论它们是 http。问题是并非所有外部域都支持 https,因此我无法将 http 替换为 https。
所以我想使用我知道可以使用 https 的域列表来执行此操作。
如果 www.有没有加。
使用@Wiktor 给出的示例,我有一些接近我想要的东西,但这需要反转到 运行 找到匹配时的替换,而不是找不到匹配时的替换,因为此代码当前功能。
/http(?!:\/\/(?:[^\/]+\.)?(?:example\.com|main\.com)\b)/i
我相信你可以使用
$domains = array("example.com", "main.com");
$s = "http://example.com http://main.main.com http://let.com";
$re = '/http(?=:\/\/(?:[^\/]+\.)?(?:'
. implode("|", array_map(function ($x) {
return preg_quote($x);
}, $domains))
. ')\b)/i';
echo preg_replace($re, "https", $s);
// => https://example.com https://main.main.com http://let.com
正则表达式匹配:
http
-http
只有后跟...(?=
- 正先行开始:\/\/
-://
文字子串(?:[^\/]+\.)?
- 除了/
和.
之外的 1+ 个字符的可选序列
(?:
+implode
代码 - 创建一个交替组转义单独的文字分支(以匹配任何一个替代方案,example
或main
等))
- 交替组结束
\b
- 单词边界)
- 前瞻结束/i
- 不区分大小写的修饰符。