【发布时间】:2013-12-28 16:09:46
【问题描述】:
示例:(已更新 - 更正了下面的代码)
<?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/
?>
如示例中所示,我试图用main(替换)替换URL 中uk(主题)的第一个实例。相反,输出显示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来避免正则表达式的复杂性。
【问题讨论】:
-
第一个例子对我来说很好,我得到了预期的输出
http://eg.com/main/sample-post/。您确定您的原始代码中没有其他错误吗? -
@BluePsyduck 你是对的。更正了代码。您现在应该能够重现该错误。
-
不,我仍然得到相同的输出。但现在看起来您调用了保存此代码的函数两次,因此您将
in替换为main,然后(意外地)再次将main中的in替换为mamain。你能确保这段代码只在你的变量上执行一次吗?
标签: php string replace substr strpos