从 href 中删除双引号
Removing double quotes from href
我有一个 html 字符串,需要从锚标记的 href 中删除双引号。
$content = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';
应该return
$content = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name='xyz&123'"></a>';
我试过了
preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="">', $content)
但这会从锚标记中删除除 href 之外的所有属性。无法找到可以在 href 中实际工作的东西
正在寻找相同的 php 代码。
I have tried preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="">', $content)
regex. but this removes all attributes from anchor tag except for href.
也许更通用一些 - 并把所有 <a ...>
的东西从等式开始?
没有太多 HTML 元素以 href
属性开头 - 即使您遇到具有这样 href
值的不同元素,它也没有意义要么,所以无论如何也需要更换。
#href="(\S+)"#
作为贪婪模式寻找并捕获 href="
和 "
之间可能最长的非空白字符串。
这给出了 href="https://example.com/abc?name="xyz&123""
作为完全匹配,而 https://example.com/abc?name="xyz&123"
作为部分匹配。
让我们将后者输入 str_replace
以摆脱 "
,使用 preg_replace
:
$content = preg_replace_callback('#href="(\S+)"#', function($m) {
return 'href="'.str_replace('"', '', $m[1]).'"';
}, $content);
你可以试试:
(<a href=".*?)"(.*?)"(.*)
上面正则表达式的解释:
(<a href=".*?)
- 表示第一个捕获组捕获第一个 "
之前的所有内容。请注意,我使用了 lazy 匹配来简化此任务。
"
- 按字面意思匹配 "
。
(.*?)
- 表示第二个捕获组捕获数据xyz&123
,它在"
. 之间
(.*)
- 表示第 3 个捕获组,它捕获 "
. 之后的所有内容
\'\'
- 用于替换零件;使用捕获的组和单引号。
你可以在here.
中找到上述正则表达式的演示
示例实施 inf php:
<?php
$re = '/(<a href=".*?)"(.*?)"(.*)/m';
$str = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';
$subst = '\'\'';
$result = preg_replace($re, $subst, $str);
echo $result;
您可以在here.
中找到上述代码的示例运行
我有一个 html 字符串,需要从锚标记的 href 中删除双引号。
$content = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';
应该return
$content = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name='xyz&123'"></a>';
我试过了
preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="">', $content)
但这会从锚标记中删除除 href 之外的所有属性。无法找到可以在 href 中实际工作的东西 正在寻找相同的 php 代码。
I have tried
preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="">', $content)
regex. but this removes all attributes from anchor tag except for href.
也许更通用一些 - 并把所有 <a ...>
的东西从等式开始?
没有太多 HTML 元素以 href
属性开头 - 即使您遇到具有这样 href
值的不同元素,它也没有意义要么,所以无论如何也需要更换。
#href="(\S+)"#
作为贪婪模式寻找并捕获 href="
和 "
之间可能最长的非空白字符串。
这给出了 href="https://example.com/abc?name="xyz&123""
作为完全匹配,而 https://example.com/abc?name="xyz&123"
作为部分匹配。
让我们将后者输入 str_replace
以摆脱 "
,使用 preg_replace
:
$content = preg_replace_callback('#href="(\S+)"#', function($m) {
return 'href="'.str_replace('"', '', $m[1]).'"';
}, $content);
你可以试试:
(<a href=".*?)"(.*?)"(.*)
上面正则表达式的解释:
(<a href=".*?)
- 表示第一个捕获组捕获第一个"
之前的所有内容。请注意,我使用了 lazy 匹配来简化此任务。"
- 按字面意思匹配"
。(.*?)
- 表示第二个捕获组捕获数据xyz&123
,它在"
. 之间
(.*)
- 表示第 3 个捕获组,它捕获"
. 之后的所有内容
\'\'
- 用于替换零件;使用捕获的组和单引号。
你可以在here.
中找到上述正则表达式的演示示例实施 inf php:
<?php
$re = '/(<a href=".*?)"(.*?)"(.*)/m';
$str = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';
$subst = '\'\'';
$result = preg_replace($re, $subst, $str);
echo $result;
您可以在here.
中找到上述代码的示例运行