2015-07-19 94 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編碼的字符串而不會丟失任何數據。