2013-02-11 87 views
0

我認爲這是扼殺url的最簡單方法。你有任何禁忌症?PHP以簡單的方式創建slugify(乾淨的URL)鏈接? iconv故障?

function url_clean($str) 
{ 
    $str = iconv('utf-8', 'us-ascii//TRANSLIT', $str); 
    $clean_str = preg_replace(array(
     '/\'|\"/', 
     '/ /' 
    ) , array(
     '', 
     '-' 
    ) , $str); 
    return $clean_str; 
} 

UPDATE

上述工作的地方很大的代碼,但在服務器返回的字符串與?,而不是音譯字:árvíztűrő - >?rv?zt?r?

在localhost

phpinfo()

已啓用iconv支持

的iconv實施 「libiconv的」

的iconv庫版本1.14

服務器上

的iconv支持啓用

phpinfo()

的iconv實現的glibc

的iconv庫版本2 。 12

+0

如果'$ str'包含例如'%30'(或任何其他網址編碼字符)?如果它包含URL中的字符無效但ASCII的一部分? – Jon 2013-02-11 13:13:56

+1

也許這更適合[代碼評論](http://codereview.stackexchange.com)? – insertusernamehere 2013-02-11 13:17:05

+0

用於創建SEO友好的網址,在這種情況下看不到問題。但你是對的。我怎樣才能提高效率? – eapo 2013-02-11 13:19:52

回答

0

謝謝! 最後,這是沒有這種buggy iconv()我的解決方案:

function url_clean($str) { 
    $accent = array(' ','ű','á','é','ú','ő','ó','ü','ö','í','Ű','Á','É','Ú','Ő','Ó','Ü','Ö','Í'); 
    $clean = array('-','u','a','e','u','o','o','u','o','i','U','A','E','U','O','O','U','O','I'); 
    $str = str_replace($accent, $clean, $str); 
    return preg_replace('/[^A-Za-z0-9-.]/', '', $str); 
} 
1

你以前的功能比一個在響應(更多情況下)要好得多。問題在於語言環境。嘗試之前添加下一行函數定義:

setlocale(LC_ALL, 'es_ES.UTF8'); 

es_ES是我的語言環境,但你可能有所不同)。