【问题标题】:PHP Regex for fixing URLs用于修复 URL 的 PHP 正则表达式
【发布时间】:2012-08-31 17:24:30
【问题描述】:

我需要使用正则表达式来搜索字符串并修复某些 url。我需要从这样的链接中删除开头/:

/admin.somedomain.com 或 /somedomain.com

还有很多其他的绝对网址,所以我不能只去掉任何前导 / 字符。 任何帮助将不胜感激。

这是处理用户输入的文本,通常是来自 TinyMCE 的 html,但有时来自带有和不带有其他 HTML 的纯文本框(或者我会以不同的方式处理它并直接处理链接,而不必先搜索字符串)。不幸的是,有时为 href 或 img src 等输入错误的网址。

我确实想要这样的链接 “/图像.jpg” "/webapp/getfile?id=3354"

但不是像这样的链接 “/somedomain.com” “/admin.somedomain.com”

这是我可能需要清理的文本示例

<p><a href="/webapp/GetFile?id={2C59BC2D}"><img src="/wahelper/GetImage?id=308" alt="" width="100" height="100" /></a></p> <p><a href="/admin.somedomain.com">test</a></p>

【问题讨论】:

  • 除非有其他方法。我愿意接受建议。
  • 正则表达式可能部分是您的解决方案,但总的来说,我认为正则表达式不会成为您的全部。除非你能想出一些非常复杂的东西。我可能会采用对我存储的所有 url 进行比较的方法。也许将它们拆分为: 并获取第一个块并查看是否有多个/ 如果有,请不要理会它,然后如果该字符是/
  • 如果没有:,那么我会看看开头的字符是什么,看看里面有//还是/
  • 那么您是如何获得这些链接的?从数据库?我们能看到那个代码吗?
  • 请使用增强功能编辑您的原始问题,而不是在 cmets 中添加详细信息 - 这样更容易理解您的问题。我想查看您正在处理的 URL 列表,这样我就可以看到正则表达式应该匹配什么以及不应该匹配什么。谢谢。

标签: php regex url


【解决方案1】:

天哪,很难得到一个简单的正则表达式。试试这个:

$str = preg_replace( "/^\/((?:admin\.)?[^.]+.(?:com|net|other_TLD_you_want))/i", "http://$1", $str);

请注意,我实际上已将 / 替换为 http://,因为如果您希望链接正常工作,那确实是您想要的。如果您只是去掉/,那么该链接最终将成为当前目录中名为admin.somedomain.com 的本地文件的链接——这可能不是您想要的。

另外请注意,您可能需要更多的 TLD,而不仅仅是 comnet - 根据需要添加它们。

另请注意,这不适用于其他国家/地区的顶级域名,例如 co.uk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2015-01-14
    • 2017-10-15
    • 2011-05-16
    相关资源
    最近更新 更多