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

PHP to replace 2 character at nth position in an string

我正在使用 codeignitor 开发双语网站,并且已经创建了语言文件。一切正常,除了切换语言时,我想替换 url 中从 0 开始的第 31 和 32 位的语言缩写。

英语 Url :

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

宗喀语 Url :

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

我只想php把en改成dz

我试过了

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

$lang_id='dz';

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

$newurl = str_replace($old_lang,$lang_id,$url );

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

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

任何知道发生了什么事的人

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

$newurl = substr_replace($old_lang, $lang_id, $url, 31, 2);

另一种选择是根据 Scuzzy 在评论中提出的更具体的搜索字符串:$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);

希望对您有所帮助。

<?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);

此方法将帮助您根据模式而不是根据位置更改语言。当然,在此我考虑过语言将在 *.php/

之后