我可以在一个字符串中使用str_replace两次吗?

时间:2014-09-20 19:36:26

标签: php str-replace

<?php
echo "I'm currently listening to</a> <a href='http://last.fm/artist/" . str_replace(" ","+",$artist) . "/_/"  . str_replace(" ","+",$currenttrack) . "'>" . $currenttrack . "</a>";
?>

以上是我的代码。我正试图在str_replace()$artist上再次使用$currenttrack

str_replace("'","%27",$artist)str_replace("'","%27",$currenttrack)

因为撇号没有经过正确处理并且与我的代码混淆,但是当我首先使用空格时,它已经通过并且不会再次改变。

我该怎么办?

4 个答案:

答案 0 :(得分:5)

如果要对同一个字符串进行多次替换,可以将数组传递给str_replace

str_replace(array(" ", "'"), array("+", "%27"), $artist)

但是,在创建网址参数时,您不应自行进行替换。您应该使用urlencode,它将执行所有必要的编码。

答案 1 :(得分:1)

试试这个。它还使您的代码更具可读性。此外,您的锚标签格式不正确。

$artist = str_replace(' ', '+', $artist);
$track = str_replace(' ', '%27', $currenttrack);

echo 'I\'m currently listening to <a href="http://last.fm/artist/' . $artist . '/_/' . $track . '">' . $track . '</a>';

答案 2 :(得分:1)

如果我正确理解了您的问题,那么您正试图在两个字符串中用+和'替换%27。为此,您必须对第一个操作的结果应用str_replace()。如果$input是原始字符串,请使用:

$intermediate = str_replace(" ", "+", $input);
$result = str_replace("'", "%27", $intermediate);

答案 3 :(得分:0)

有一个内置函数可以执行您尝试执行的操作:urlencode

$currenttrack = $artist = "X' xx WWW' w";

$url = "http://last.fm/artist/" . $artist . "/_/"  . $currenttrack;

echo urlencode($url); // http%3A%2F%2Flast.fm%2Fartist%2FX%27+xx+WWW%27+w%2F_%2FX%27+xx+WWW%27+w