【发布时间】:2017-03-28 09:53:45
【问题描述】:
我在 WordPress 中运行一个 PHP 脚本,使用以下正则表达式从所有链接中删除 http: 和 https: 协议:
$links = preg_replace( '/<input\b[^<]*\bvalue=[\"\']https?:\/\/(*SKIP)(*F)|https?:\/\//', '//', $links );
对于第一部分:<input\b[^<]*\bvalue=[\"\']https?:\/\/(*SKIP)(*F),这将跳过任何具有 http: / https: 值的 <input> 标签,例如:
<input type="url" value="http://example.com">
另外,我希望它跳过任何具有rel="canonical" 属性的<link> 标签:
<link rel="canonical" href="http://example.com/remove-http/" />
使用regex tester,我一直在尝试更新逻辑。到目前为止,这是我想出的:
<(input|link)\b[^<]*\(value|rel)=[\"\'](https?:\/\/|canonical)(*SKIP)(*F)|https?:\/\/
但这对我不起作用。
【问题讨论】:
-
不是答案,但你真的应该停止使用协议相关的 URL,因为它们不利于安全性和性能:The Protocol-relative URL 和 Stop Using the Protocol-relative URL。