PHP替换字符串中第n个位置的2个字符

PHP替换字符串中第n个位置的2个字符,php,str-replace,Php,Str Replace,我正在开发双语网站在Codeignator和我已经创建了语言文件。除了在切换语言时,我想替换url中从0开始的第31位和第32位的语言缩写外,所有操作都正常 英文网址: $url=http://localhost/abc/index.php/en/news/title/带有宗卡的新版本goldendict 宗喀网址: $url=http://localhost/abc/index.php/dz/news/title/带有DZONGKA的goldendict新版本 我只希望php将en更改为dz

我正在开发双语网站在Codeignator和我已经创建了语言文件。除了在切换语言时,我想替换url中从0开始的第31位和第32位的语言缩写外,所有操作都正常

英文网址:

$url=http://localhost/abc/index.php/en/news/title/带有宗卡的新版本goldendict

宗喀网址:

$url=http://localhost/abc/index.php/dz/news/title/带有DZONGKA的goldendict新版本

我只希望php将en更改为dz

我试过了

$url=http://localhost/abc/index.php/en/news/title/带有宗卡的新版本goldendict

$lang_id='dz'

$old_lang=substr($url,31,2)

$newurl=str\u replace($old\u lang,$lang\u id,$url)

然而,上述代码将dz更改为en,但也替换了45和46个字符。这就是转换后发生的情况

$url=http://localhost/abc/index.php/dz/news/title/dzw-version-of-goldendict-with-dzongkha


任何知道发生了什么的人

由于您暗示国家/地区代码始终位于字符串中的第31位,因此您可以使用该函数限制替换的范围

$newurl = substr_replace($old_lang, $lang_id, $url, 31, 2);
另一种选择是,按照斯库齐在评论中的建议,在搜索字符串中更加具体:
$newurl=str_replace('/en/','/dz/',$url)

试试这个-

$url="http://localhost/abc/index.php/en/news/title/new-version-of-goldendict-with-dzongkha";

echo $str = substr_replace($url,'dz',31,2);

希望这能对您有所帮助。

好旧
$newurl=str_replace(“/en/”、“/dz/”、$url)可能足够了?为什么需要替换语言字符串?您应该根据当前语言正确构建URL。包括现在似乎固定为一种语言的标题。工作没有任何问题,我看到你在那里做了什么,太糟糕了,我假设substr_replace只适用于5个参数。。。谢谢@Afshan
<?php

$url = "http://localhost/abc/index.php/en/news/title/new-version-of-goldendict-with-dzongkha";

function changeLanguage($url, $language)
{
    $new_url = "";
    $url_broken = explode("/", $url);
    foreach ($url_broken as $key => $value) {
        if (strpos($value, ".php")!==false) {
            $lang_index = $key+1;
            break;
        }
    }
    if (isset($lang_index)) {
        $url_broken[$lang_index] = $language;
    }
    $new_url = implode("/", $url_broken);
    return $new_url;
}

$url = changeLanguage($url, "dz");
var_dump($url);