PHP strtr不起作用

时间:2015-07-19 09:00:52

标签: php string url

我正在寻找一些安全的URL生成器很长一段时间,但找不到一个适用于匈牙利语的,所以我决定用strtr函数替换匈牙利语字符,但它不能正常工作。它不会取代任何只是“”到“ - ”。

function safeURL($str) {
    $clean = strtr($str, array('Á'=>'a', 'É'=>'e', 'Í'=>'i', 'Ú'=>'u', 'Ü'=>'u', 'Ű'=>'u', 'Ó'=>'o', 'Ö'=>'o', 'Ő'=>'o', '.'=>'-', '!'=>'-', '.'=>'?'));
    $clean = strtr($clean, array('á'=>'a', 'é'=>'e', 'í'=>'i', 'ú'=>'u', 'ü'=>'u', 'ű'=>'u', 'ó'=>'o', 'ö'=>'o', 'ő'=>'o', ' '=>'-', '/'=>'-', ':'=>'-'));
    $clean = trim($clean, '-');
    return $clean;
}

我需要列出所有大写字母和非大写字母,这看起来有点奇怪,但strtolower似乎也不适用于这些字符。我究竟做错了什么? (页面和数据库中的编码已正确设置为UTF-8)。

输出:

Üdvözöllek a weboldalamon!  =>  Üdvözöllek-a-weboldalamon
Sziasztok üpegvőreúű        =>  Sziasztok-üpegvőreúű

3 个答案:

答案 0 :(得分:1)

试试:

$string = "IÁm DÍYÁR";

//These are the chars that are going to be replaced.. you can add other chars by yourself
$bad_chars = array('Á', 'É', 'Í', 'Ú', 'Ü', 'Ű', 'Ó'); 

//the bad chars are going to be replaced by those ones by order
$good_chars = array('A', 'E', 'I', 'U', 'U', 'U', 'O');


$safe_str = strtr($string, array_combine($bad_chars, $good_chars));

或在你的情况下这是一个功能:

function safeURL($str) {
    $capital_bad_chars = array('Á', 'É', 'Í', 'Ú', 'Ü', 'Ű', 'Ó', 'Ö', 'Ő', '.', '!', '.');
    $capital_good_chars = array('a', 'e', 'i', 'u', 'u', 'u', 'o', 'o', 'o', '-', '-', '?');

    $small_bad_chars = array('á', 'é', 'í', 'ú', 'ü', 'ű', 'ó', 'ö', 'ő', ' ', '/', ':'));
    $small_good_chars = array('a', 'e', 'i', 'u', 'u', 'u', 'o', 'o', 'o', '-', '-', '-');

    $clean = strtr($str, array_combine($capital_bad_chars, $capital_good_chars));
    $clean = strtr($str, array_combine($small_bad_chars, $small_good_chars));

    $clean = trim($clean, '-');
    return $clean;
}

对我有用!

答案 1 :(得分:0)

为什么不使用特殊扩展名。 Derick的Transliterate相当不错。看看 - 也许你可以使用它。 http://derickrethans.nl/projects.html在页面中间查看“Transliteration PHP Extension”,“Read more”下还有一个示例

答案 2 :(得分:0)

您需要使用多字节字符串函数来正确处理UTF-8字符。尝试使用str_replacemb_strtolower功能。 根据PHP文档str_replace是二进制安全函数。这意味着它可以处理UTF-8编码的字符串而不会丢失任何数据。