0

これが URL をスラッグ化する最も簡単な方法だと思います。禁忌はありますか?

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

アップデート

上記のコードはローカルではうまく機能しますが、サーバーでは文字変換された?文字の代わりに文字列を返します: árvíztűrő->?rv?zt?r?

phpinfo()ローカルホストで

iconv サポートが有効

iconv 実装「libiconv」

iconv ライブラリ バージョン 1.14

phpinfo()サーバー上

iconv サポートが有効

iconv 実装 glibc

iconv ライブラリ バージョン 2.12

4

2 に答える 2

1

以前の関数は、応答の関数よりもはるかに優れています (より多くのケース)。問題はロケールにあります。関数定義のに次の行を追加してみてください。

setlocale(LC_ALL, 'es_ES.UTF8');

( es_ESは私のロケールですが、あなたのロケールは異なる場合があります)。

于 2014-09-30T16:11:07.937 に答える
0

ありがとう!最後に、これはバグのある 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);
}
于 2013-02-13T23:29:17.470 に答える