PHP - 评论系统“替换Http // urls”

时间:2017-03-26 20:11:33

标签: php

我正在创建一个由Steam API连接的简单评论系统。我网站上连接的每个Steam用户都可以自动发布内容。但我正在改变一些功能来取代像URL这样的东西。

我的问题是:当用户发布类似的内容时,

“你好,我很高兴,看看http://www.cute.com

自动替换链接的http://而不更改字符串中的http://。

2 个答案:

答案 0 :(得分:1)

也许是这样的?

<?php
$str = "helloo im nice, have a look http://www.cute.com";
echo preg_replace("/http:\/\/(.+)\.(.+)\.(.+)/", "<a href='http://$1.$2.$3'>$1.$2.$3</a>", $str);
?>

这会将任何链接转换为锚点(或a标记)。

替代添加

或者,也可以添加对https的支持。在这种情况下,以下内容可能有用。

<?php
$str = "helloo im nice, have a look http://www.cute.com";
echo preg_replace("/http(s?):\/\/(.+)\.(.+)\.(.+)/", "<a href='http$1://$2.$3.$4'>http$1://$2.$3.$4</a>", $str);
?>

这利用了?修饰符,这意味着“一个或多个前面的字符”。在这种情况下,它是“s”字符,因为它是“http”和“https”都匹配。

解释

这使用RegEx(或正则表达式)来创建它。
preg_replace函数的第一个参数采用RegEx(我喜欢在这里测试我的:http://regexr.com/)。

所有RegEx必须以正斜杠开头和结尾。中间的位如下。

http:只是选择一个以“http:”开头的字符串 \/\/被称为“转义”,它将选择两个正斜杠。由于正斜杠是RegEx中使用的特殊字符(语句的开头和结尾),因此需要对它们进行转义,以便PHP认为RegEx不会更快结束。
(.+)括号也是特殊字符(虽然没有转义),它们被称为“捕获组”。这是用来让我看到“http://”和“.com”(或者使用的任何扩展名)之间的内容。句号(或句号或“。”)字符选择任何 \.进一步逃避。由于完全停止被用作特殊角色,我们必须逃避这一点。到目前为止,这意味着我们选择“http://”然后选择任何,然后停下来。 (.+)最后但并非最不重要的是最终捕获组。这样,再次从字符串中选择任何,以便我们的最终捕获组和RegEx完成。

改性剂:

  • ?表示“前面一个或多个字符”。这意味着/tests?/将匹配testtests,因为s是前面的字符,在第一个示例中我们有0,而在第二个例子中有1个
  • +表示“前面一个字符中的一个”。在这种情况下,我们说的是更多的东西,这意味着我们希望提供至少一个字符。

第二个参数是我们的替换部分。

简而言之,$1$2部分将引用上述RegEx中的两个括号。

进一步阅读

The PHP function I used

More information on Regular Expressions

RegEx capture groups

答案 1 :(得分:0)

$string = 'helloo im nice, have a look http://www.cute.com';
$string = str_replace('http://', '', $string);
echo $string;