2009-04-12 11 views
3

URL(* .html)のファイル名として使用される文字列をPHPに自動的に変換する機能を用意しています。 ASCIIは安全な側にする必要がありますが、SEOのニーズにはファイル名を任意の言語にする必要がありますが、ダッシュ( - )やアンダースコア(_)以外の句読点は含まないようにしてください。 *%$#@のように「」許されるべきではない。句読点を除く任意のUTF文字に一致する正規表現

スペースをダッシュ​​に変換する必要があります。

私は正規表現を使用することが最も簡単な方法になると思いますが、私はどのように処理するか、それはわかりませんUTF8文字列

マイアスキー機能次のようになります。

function convertToPath($string) 
{ 
    $string = strtolower(trim($string)); 
    $string = preg_replace('/[^a-z0-9-]/', '-', $string); 
    $string = preg_replace('/-+/', "-", $string); 
    return $string; 
} 

ターnks、

Roy。

答えて

4

私はSEOのニーズには、URLのASCII文字を使用する必要があると思います。

理論的には、さらに多くの文字がURLに使用できます。実際には、ほとんどのシステムはASCIIを信頼できるものとしてのみ解析します。

また、多くの自動パーズリンクスクリプトは、非ASCII文字でチョークします。したがって、URLにASCII以外の文字を含むURLを許可すると、ユーザーが作成したコンテンツに表示されるリンクの変更が大幅に減少します。 How to handle diacritics (accents) when rewriting ‘pretty URLs’

受け入れソリューションがあります: あなたも見てみることができ

(あなたは、このようなスクリプトの例をしたい場合は、stackoverflowのスクリプトを見て、それは例えば括弧にチョーク)非ASCII文字をtransiterateする:

<?php 
    $text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text); 
?> 

希望これは

+0

URLにASCII以外の文字を残しておくと、クライアントのブラウザのURLエンコーディングをトラッキングする必要があります(これはあまり一致しません)。ただし、iconv-transliterationには正しいロケール(UTF-8エンコーディング)を設定する必要があります.Windowsを使用すると、 –

+0

はショーストッパーになります。 –

4

UTF-8モードが選択されている場合は、すべての非レター S選択することができます(Unicode汎用カテゴリに応じて - PHPのドキュメントRegular Expression Detailsを参照してください)

/\P{L}+/ 

を使用して、私は思います(未テスト)次のことを試してください。

function convertToPath($string) 
{ 
    $string = mb_strtolower(trim($string), 'UTF-8'); 
    $string = preg_replace('/\P{L}+/', '-', $string); 
    $string = preg_replace('/-+/', "-", $string); 
    return $string; 
} 

は、それはあなたのマルチバイト文字を台無しよとあなたはUTF-8文字列にstrtolower()とprolemsを買ってあげることに注意してください - 代わりにmb_strtolower()を使用しています。

+0

を助けこれがまたして(通常は非間隔であることを)アクセントのようなものに置き換えられます「 - 」。だから、「AïtBen Haddou」は「Ai-t Ben Haddou」になります。 – Jacco

関連する問題