【问题标题】:PHP BBCode and linksPHP BBCode 和链接
【发布时间】:2012-03-04 05:06:02
【问题描述】:

好的。所以我正在构建一个将 bbcoded 字符串解析为 html 的函数。 BBCode 链接的结构是这样的:

[url=http://somelink.com/]Link[/url]

我想成功:

<a href="http://somelink.com/">Link</a>

但我也想检查链接是否有效,以保护自己免受 XSS 攻击。我找到了这个正则表达式来检查有效链接:

/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

现在,我尝试 preg_match_all 的 $str 和 foreach 匹配以检查它的 url 是否有效,然后将其解析为 html,但似乎我做不到。有什么建议吗?

【问题讨论】:

  • 你是怎么尝试的?你得到什么输出/错误?
  • 您可能会发现网络上可用的降价促销之一将为您提供所有这些信息。 Github 有一个列表。 github.github.com/github-flavored-markdown
  • SoboLAN 下面是一段代码:$links = array(); if(preg_match('/[url=(.*)](.*)[\/url]/', $str, $links)) { echo '
    ' . print_r($links, true) 。 '
    ';与我想要的不符。

标签: php regex anchor bbcode


【解决方案1】:

看看 PHP 的内置 Filter 模块。它从 PHP 5.2 开始可用,并且包含 FILTER_VALIDATE_URL 常量来过滤有效的 url。见一些usage examples

从未亲自使用过此功能,但我相信在您的情况下使用语言内置功能比使用正则表达式更安全(因为您似乎并不精通正则表达式)。

【讨论】:

  • 这不是我的问题。
  • 我无法制作将 BBCode 替换为 html 并检查有效 URL 的正则表达式。
【解决方案2】:

为什么要重新发明轮子?

你可以使用PECL extension来解析BBCode

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2023-03-18
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多