2015-07-19 137 views
0

我正在寻找一个安全的URL生成器很长一段时间,但找不到一个与匈牙利语言,因此我决定用strtr函数替换匈牙利字符,但它不能正常工作。它不会取代任何只是“”到“ - ”。PHP 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úű 
+0

您的代码在那里工作https://eval.in/401117 – splash58

+0

看看:http://creativesdiary.com/article/php-strreplace-array-tutorial – SuperDJ

回答

0

为什么不使用特殊扩展了点。 Derick的Transliterate非常好。看看 - 也许你可以使用它。 http://derickrethans.nl/projects.html看在“音译PHP扩展”页面的中间也有在“更多”

+0

我正在寻找最简单的方法。 ..我alerady在一些网页上使用这种strtr技术,我不知道为什么它不在这个网站上工作。 splash58的评论告诉我,我正在做的PHP部分权利,但idk whi它只是忽略除单个空格之外的所有字符。我也用str_replace试过我的函数,结果相同... –

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; 
} 

这对我有效!

0

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