为了账号安全,请及时绑定邮箱和手机立即绑定

从 href 中删除双引号

从 href 中删除双引号

PHP
慕的地8271018 2023-07-08 17:33:53
我有一个 html 字符串,需要从锚标记的 href 中删除双引号。$content = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';应该返回$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="\1">', $content)但这会删除锚标记中除 href 之外的所有属性。无法找到可以在 href 中实际工作的东西正在寻找相同的 php 代码。
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您可以尝试:

(<a href=".*?)"(.*?)"(.*)

上述正则表达式的解释:

  • (<a href=".*?)- 代表第一个捕获组捕获捕获第一个之前的所有内容"。请注意,我使用了惰性匹配,这有助于完成此任务。

  • "-"从字面上匹配。

  • (.*?)- 表示第二个捕获组捕获xyz&123介于两者之间的数据"

  • (.*)- 代表第三个捕获组,捕获 后的所有内容"

  • $1\'$2\'$3- 对于更换零件;将捕获的组与单引号一起使用。

//img1.sycdn.imooc.com//64a92da800019a6610450121.jpg

您可以在此处找到上述正则表达式的演示

示例实现 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 = '$1\'$2\'$3';


$result = preg_replace($re, $subst, $str);


echo $result;

您可以在此处找到上述代码的示例运行


查看完整回答
反对 回复 2023-07-08
?
jeck猫

TA贡献1909条经验 获得超7个赞

我尝试过preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="\1">', $content)正则表达式。但这会删除锚标记中除 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);


查看完整回答
反对 回复 2023-07-08
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信