【问题标题】:PHP - Preg replace on URLS from string failurePHP - Preg 替换字符串失败的 URL
【发布时间】:2011-12-26 06:54:42
【问题描述】:

这是我的功能:

    function makeClickableLinks($s) {
  return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}


$description = $_POST['description'];

echo makeClickableLinks($description);

$_POST['description'] 是一个表单文本区域,稍后将插入到 MySQL 表中。

我希望允许用户在此输入字段中创建链接。当我使用此功能时,用户输入的数据如下所示:

Whats up guys. Here's my website! Please check it out!!
<a href="google.com">hi</a>

现在是一个可点击的链接,但链接到:

http://(myurl).com/google.com

它认为链接是一个子目录。有任何想法吗?谢谢!

【问题讨论】:

  • 您必须在链接前加上 http://(或 https://,或其他任何内容),否则它会被视为相对链接并附加到当前查看的 URL。

标签: php url replace hyperlink


【解决方案1】:

据我了解,您希望组织一些事情,例如替换用户记录中的引用,以便他们引用您的网站。托盘这个正则表达式:

<?php
$str = "Whats up guys. Here's my website! Please check it out!!
<a href='google.com'>hi</a> and something:)";

echo preg_replace("/(<a[^<]* href=['\"])(http:\/\/|https:\/\/)?([^\"]*?)(['\"][^<]*>)/is", "$1mysite.com/$3$4", $str);

【讨论】:

【解决方案2】:

这是相对链接问题。在您的函数 makeClickableLinks($s) 中,您检查了链接是否以 http 或 https 开头,如果没有附加 http:// 。在下面找到示例。

function makeClickableLinks($s) {
    $link = ( strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s;
    return $link;
}

【讨论】:

  • @user1093634 我已经更新了我的答案,你可以试试让我知道吗?
  • 您好,谢谢。您的脚本不起作用。它会生成这样的链接:click 变为 click
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2015-08-07
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
相关资源
最近更新 更多