我正在创建一个由Steam API连接的简单评论系统。我网站上连接的每个Steam用户都可以自动发布内容。但我正在改变一些功能来取代像URL这样的东西。
我的问题是:当用户发布类似的内容时,
“你好,我很高兴,看看http://www.cute.com”
自动替换链接的http://而不更改字符串中的http://。
答案 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?/
将匹配test
和tests
,因为s是前面的字符,在第一个示例中我们有0,而在第二个例子中有1个+
表示“前面一个字符中的一个”。在这种情况下,我们说的是更多的东西,这意味着我们希望提供至少一个字符。第二个参数是我们的替换部分。
简而言之,$1
和$2
部分将引用上述RegEx中的两个括号。
答案 1 :(得分:0)
$string = 'helloo im nice, have a look http://www.cute.com';
$string = str_replace('http://', '', $string);
echo $string;