用英文字母替换土耳其字母

3

我希望能够用英文字母替换句子中的每个土耳其字母,我尝试使用以下函数:

$title_result = "Türkiye'nin en iyi oranlari ile Lider Bahis Sitesi";
$turkish = array("ı", "ğ", "ü", "ş", "ö", "ç");//turkish letters
$english   = array("i", "g", "u", "s", "o", "c");//english cooridinators letters

$final_title = str_replace($turkish, $english, $title_result);//replace php function
print_r($turkish);//when printing this i got: Array ( [0] => ı [1] => ğ [2] => ü [3] => ş [4] => ö [5] => ç ) 
return $final_title;

我认为问题出在土耳其字符上,但我不知道如何让php正确读取这些字符以便正确地进行替换。请给我建议?

你的代码在我的机器上运行良好。也许是你的配置有问题 - 检查一下 mbstring:http://php.net/manual/en/book.mbstring.php - k102
最终标题未显示或打印,因为str_replace无法工作,所以它没有值。 - Basel
请查看 mbstring 的 php 信息 (php -i | grep mbstring 在 Linux 终端中)。它应该已经启用,因为我猜测土耳其字符可以存储在两个字节而不是一个字节中。 - k102
为什么要进行这样的替换呢?如果你认为土耳其字母不能使用,那么你可能是错的。而且,即使真的不能使用,通常最好避免过多地丢失信息,例如用“sh”代替“ş”,而不是“s”。 - Jukka K. Korpela
phpfiddle上运行得很好。 - gwillie
显示剩余2条评论
2个回答

4
关于大写字母, 我的解决方案是:
function url_make($str){
    $before = array('ı', 'ğ', 'ü', 'ş', 'ö', 'ç', 'İ', 'Ğ', 'Ü', 'Ö', 'Ç'); // , '\'', '""'
    $after   = array('i', 'g', 'u', 's', 'o', 'c', 'i', 'g', 'u', 'o', 'c'); // , '', ''

    $clean = str_replace($before, $after, $str);
    $clean = preg_replace('/[^a-zA-Z0-9 ]/', '', $clean);
    $clean = preg_replace('!\s+!', '-', $clean);
    $clean = strtolower(trim($clean, '-'));

return $clean;
}

echo url_make('Bu Çocuğu Kim İşe Aldı'); // bu-cocugu-kim-ise-aldi
echo url_make('Birisi"nin adı'); // birisinin-adi
echo url_make("I'll make all happen"); // ill-make-all-happen

如果想要生成i-ll-make-all-happen而不是ill-make-all-happen,只需将'\''和'"'添加到$before列表中,并将空格' '和' '添加到after列表中即可。


4

您是否注意到您打印的是 $turkish 而不是替换后的字符串(即 $final_title)?您看到一个数组,因为您正在打印该数组。如果您在浏览器上仅打印该数组,则可能会看到那些混乱的字符,因为输出未使用 UTF-8 编码。但是,如果您执行以下操作(请注意 meta 标记):

<meta charset="utf-8" />
<?php
$title_result = "Türkiye'nin en iyi oranlari ile Lider Bahis Sitesi";
$turkish = array("ı", "ğ", "ü", "ş", "ö", "ç");//turkish letters
$english   = array("i", "g", "u", "s", "o", "c");//english cooridinators letters

$final_title = str_replace($turkish, $english, $title_result);//replace php function
print_r($turkish);

您将正确地看到字符。但这不是问题所在。str_replace()的功能很好。它应该正常工作。

这个代码文件的字符编码是什么?尝试将其更改为UTF-8无BOM或UTF-8。它能正常工作吗?(但要小心,因为这可能会破坏您的文件,在进行任何操作之前请备份。我在Notepad ++上使用Ctrl + A,Ctrl + X,更改编码,Ctrl + V)。编码是我还没有掌握的技巧。 - Parziphal
@k102 第二个字符是一个ü...那是唯一的字符。哈哈。 - Parziphal
@k102 嗯,替换对我起作用,但 Basel 说对他不起作用。我想他得试着调整编码直到它能工作为止。 - Parziphal
大家好,感谢你们的评论。我已经在 PHPFiddle 上尝试了这段代码,它可以正常工作。但是在我的网站上却不行,即使我将所有页面编码都改为 UTF8 且没有 BOM,仍然没有任何效果。我已经尝试了各种方法,但还是无法解决问题。 - Basel
@BaselShbeb 对不起,你需要继续尝试编码。这就是我能说的D: - Parziphal
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接