【问题标题】:Remove last \" from link with preg_match_all从与 preg_match_all 的链接中删除最后一个 \"
【发布时间】:2017-08-24 08:18:03
【问题描述】:

下一个链接示例返回 2 个以 \" 结尾的链接。示例文本中没有以 \" 结尾的链接。但是当我在 WordPress 网站的 preg_match_all() 函数下运行时,我得到了这个。

我需要解决这个问题并只获取链接以 \"

结尾

这里是我从中检索链接的文本示例:

$banner_link = '[<img src="https://i.stack.imgur.com/iJIOI.gif" width="300" height="250" border="0" alt="" />][2]

';

preg_match_all('!https?://\S+!', $banner_link, $matches);
$all_urls = $matches[0];
print_r($all_urls[0]); 
echo '<br>';
print_r($all_urls[1]); 

这里的结果都以\"结尾

https://mobico.nl/telefoon/?tt=26156_1144596_250041_&r=\"

http://ti.tradetracker.net/?c=26156&m=1144596&a=250041&r=&t=html\"

我可以使用 str_replace() 来做到这一点,但使用 preg_match_all() 函数可能是可能的。

【问题讨论】:

  • 您的$banner_link 不包含``,请编辑您的输入数据
  • 不明白你的意思。
  • 输入字符串中r=后面没有\"preg_match_all() 标识的 URL 以 " 结尾,因为 regex 过于宽松。
  • 只是添加一些额外的信息。请再次阅读线程,我认为 WordPress 导致了这个问题。但我需要解决它。

标签: php regex preg-match-all


【解决方案1】:

首先,输入字符串中r=后面没有\"preg_match_all()不可能返回以\"结尾的URL。

preg_match_all() 标识的 URL 以 " 结尾,因为 regex 过于宽松。

试试这个:

$banner_link = '<a href="https://mobico.nl/telefoon/?tt=26156_1144596_250041_&amp;r=" target="_blank" rel="nofollow"><img src="http://ti.tradetracker.net/?c=26156&amp;m=1144596&amp;a=250041&amp;r=&amp;t=html" width="300" height="250" border="0" alt="" /></a>';

preg_match_all('!https?://[^"]*!', $banner_link, $matches);
print_r($matches);

输出是:

Array
(
    [0] => Array
        (
            [0] => https://mobico.nl/telefoon/?tt=26156_1144596_250041_&amp;r=
            [1] => http://ti.tradetracker.net/?c=26156&amp;m=1144596&amp;a=250041&amp;r=&amp;t=html
        )
)

【讨论】:

  • 现在每个链接都以 \ 结尾,也许 WP 会这样做。到目前为止,我用 $link1 = str_replace('\', '', $matches[0] ); 解决了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多