使用PHP替换字符串中的URL出现

时间:2013-10-23 08:31:18

标签: php replace

我想用[FILENAME]替换以下文本中的网址,其中FILENAME是文件的名称。

check out this car http://somesite/ford.png

这将显示为:

check out this car [ford]

到目前为止,这是我的代码:

$text = $_POST['text']; //get submitted post
$link = strstr($text, 'http://'); //look for an http
$filename = pathinfo ($link, PATHINFO_FILENAME); //get filename from $link
$result = str_replace($text,$link,"[".$filename."]"); // search on $text, find $link, replace it with $filename

echo $result;

目前,我只回来[ford],其他所有文字都在哪里?

4 个答案:

答案 0 :(得分:1)

使用str_replace

您的参数输入顺序错误,您需要更改它们:

$result = str_replace($link,"[".$filename."]",$text);

有关文档,请参阅here

替代(正则表达式)

您可以使用正则表达式。这种方法速度稍慢,但使用的代码更少:

$result = preg_replace('/http(s?):\/\/[a-z]\/(.+)\.png/i', '[$1]', $text);

然后,您可以通过允许其他类型的图像来进一步改变您的正则表达式:

$result = preg_replace('/http(s?):\/\/[a-z]\/(.+)\.(png|gif|jpg|jpeg)/i', '[$1]', $text);

结束

您可以使用上述任何一种方法,但在我看来,我会使用第一种方法。正则表达式可能非常出色,但如果您错误地定义它们,或者忘记模式中的潜在因素,它们也可能不可靠。

答案 1 :(得分:1)

$result = preg_replace ('/http:\/\/somesite\/(.+)\.png/', '[$1]', $text);

答案 2 :(得分:0)

我使用#作为正则表达式分隔符。

$result = preg_replace('#http://somesite/(.+)\.png#', '[$1]', $text);

答案 3 :(得分:0)

您可以使用:

<?php
$text = 'check out this car http://somesite/ford.png'; //get submitted post
$link = strstr($text, 'http://'); //look for an http
$filename = pathinfo ($link, PATHINFO_FILENAME); //get filename from $link
$result = ereg_replace("http://([-]*[.]?[a-zA-Z0-9_/-?&%])*", "[$filename]", $text); // search on $text, find $link, replace it with $filename

echo $result;

?>

输出:

  

看看这辆车[福特]

或者,如果您想链接到使用论坛

<?php
$text = 'check out this car http://somesite/ford.png'; //get submitted post
$link = strstr($text, 'http://'); //look for an http
$filename = pathinfo ($link, PATHINFO_FILENAME); //get filename from $link
$result = ereg_replace("http://([-]*[.]?[a-zA-Z0-9_/-?&%])*", "<a href=\"\\0\">\\0</a>", $text); // search on $text, find $link, replace it with $filename

echo $result;
?>

或者你想把“福特”作为链接,你可以使用这个:

<?php
$text = 'check out this car http://somesite/ford.png'; //get submitted post
$link = strstr($text, 'http://'); //look for an http
$filename = pathinfo ($link, PATHINFO_FILENAME); //get filename from $link
$result = ereg_replace("http://([-]*[.]?[a-zA-Z0-9_/-?&%])*", "<a href=\"\\0\">$filename</a>", $text); // search on $text, find $link, replace it with $filename

echo $result;

?>