【问题标题】:preg_match ID in URLURL 中的 preg_match ID
【发布时间】:2011-07-14 08:22:42
【问题描述】:

编辑: 抱歉,我的第一篇文章不太清楚。好的,我将文本存储在数据库中,我想对其进行处理并在我的网站上查找指向产品的任何链接,并将它们变成一个精美的链接。以下是 2 个链接和我当前的 exp。第二个链接 (Link2) 按预期工作并将值 21 传递给 detailsLink() 我的问题在于 Link1 它将 2 的值传递给 detailsLink() 而不是 21 如预期的那样。我想完全忽略 url,因为 detailsLink() 会重新创建带有产品评级/cat 等的链接。它也应该适用于 http 或 https 链接。

链接1:http://192.168.2.22/dev/details.php?id=21 链接2:http://192.168.2.22/dev/details.php?id=21&module=info#Desc

$s = preg_replace("%(?<![=\]\'\"\w])https?://[^<>\s\'\",]*$ADDRESS\/details\.php\?id=([0-9]+)[^<>\s\'\",]+%ie", "detailsLink(\\1)", $s);

$ADDRESS 的值为 192.168.2.22/dev

【问题讨论】:

  • 请不要使用 e(val) 修饰符,而是使用 preg_replace_callback
  • 请不要用正则表达式重新发明轮子。解析 URL 的查询信息部分的函数已经在 PHP 中可用。见parse_url

标签: php url parameters preg-replace


【解决方案1】:

无需重新发明轮子:

$url="http://192.168.2.22/dev/details.php?id=21&module=info#Desc";

parse_str(parse_url($url,PHP_URL_QUERY), $arr);

print_r($arr);

给你:

Array
(
    [id] => 21
    [module] => info
)

parse_str() parse_url()

【讨论】:

    【解决方案2】:

    我不明白。为什么不直接使用$_GET['id']

    编辑:没关系。我从来不知道这些功能! (即parse_url)

    【讨论】:

    • 可能是因为它不是当前页面的 URL。
    • 我最初是这么想的,但这个问题的措辞非常混乱。
    • 对不起,我不是很清楚,这是一些用户发布的文本,存储在数据库中,我正在处理以显示在网站上,我想将文本中找到的任何产品链接转换为花哨的链接。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2012-02-09
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多