使用substr_replace替换整个输入字符串?

时间:2013-12-28 16:09:47

标签: php string replace substr strpos

示例: 更新 - 更正了以下代码

<?php

$canonical = 'http://eg.com/in/sample-post/';

$pos = strpos( $canonical, 'in' );

echo substr_replace( $canonical, 'main', $pos, strlen('in') );

// OUTPUT: http://eg.com/mamain/sample-post/

?>

如示例所示,我尝试使用uk替换URL中main(主题)的第一个实例(替换)。相反,输出显示mamain。我不知道为什么。

但是如果没有,那么相同的代码似乎也能正常工作。 主题中的字符数大于替换,例如

<?php

$canonical = 'http://eg.com/main/sample-post/';

$pos = strpos( $canonical, 'main' );

echo substr_replace( $canonical, 'uk', $pos, strlen('main') );

// OUTPUT: http://eg.com/uk/sample-post/

?>

显然,第二个代码虽然相同,但是我打算做什么。

如何修改代码以使其在两个实例中都有效?我在这里错过了什么逻辑?

注意:

  • 代码只是为了让您了解我在做什么。

  • 我希望避免使用preg_replace来避免正则表达式并发症。

3 个答案:

答案 0 :(得分:1)

你的例子对我来说很好。

但看起来您正在调用保存此代码两次的函数,因此您将in替换为main,然后(偶然)将in替换为{{1}到main

您能确保此代码仅对您的变量执行一次吗?

答案 1 :(得分:0)

您可以在此处使用preg_replace

$canonical = 'http://eg.com/uk/sample-post/';
echo preg_replace('/\buk\b/', 'main', $canonical) . "\n";

$canonical = 'http://eg.com/main/sample-post/';
echo preg_replace('/\bmain\b/', 'uk', $canonical) . "\n";

<强>输出:

http://eg.com/main/sample-post/
http://eg.com/uk/sample-post/

答案 2 :(得分:0)

这似乎对我有用:

$string = 'http://eg.com/uk/sample-post/';

echo substr_replace( $string, 'main', strpos($string,'uk'), strlen('uk'));

你也可以使用:

$string = 'http://eg.com/uk/sample-post/';

echo str_replace('uk','main', $string);

但这会取代所有事件......