示例:( 更新 - 更正了以下代码)
<?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
来避免正则表达式并发症。
答案 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);
但这会取代所有事件......