2009-08-03 4 views
0

私はTRANSLITとPHPのinconvを使用してきたなど、特殊文字、および「アクセント」文字を混合することができ、データの束、変換する文字が

を得たが、今日気づきました弾丸ポイントが「雄牛」に変換されること。私はこのような他の文字が変換されたり削除されたりしないかどうかわかりません。 $、*、%などは削除されます。

私がしようとしていることは、文字を残しておきますが、「非言語」のビットだけを削除することです。

これは私がinconv機能を超えることにpreg_replaceを移動する場合、彼らが翻訳される前に、アクセント文字が削除されますので、それは」doesnの、当然の

 

     $slugIt = @iconv('UTF-8', 'ASCII//TRANSLIT', $slugIt); 

    $slugIt = preg_replace("/[^a-zA-Z0-9 -]/", "", $slugIt); 

を使用してきたコードですいずれかの仕事。

これに関するご意見はありますか? TRANSLITの文字以外の文字が欠落していますか?

---------------------編集------------------------ --------- 不思議なことに、それは弾丸を '雄牛'に変えているTRANSLITではないようです。私はpreg-replaceをコメントアウトし、 'bull'は箇条書きに戻った。残念ながら、私はこれを使って読みやすいURLを作成しようとしています。他にもいくつかのURLがありますので、URLエンコーディングを行う必要があります。

+0

ASCIIは//行き過ぎIGNOREしていますか? – rojoca

+0

私はそれが遠すぎると思うが、私はそれをもう一度見せている。 – pedalpete

+0

困っている文字のリストがある場合は、http://php.net/strtrが役立つかもしれません。いくつかのコメントは役に立つかもしれません – rojoca

答えて

0

preg_replaceに/ u修飾子を追加してみてください。 Pattern Modifers

+0

私は/ uを試しましたが、正しく使用しているかどうかはわかりません。 これは私が今持っているものです

 $slugIt = @iconv('UTF-8', 'ASCII//TRANSLIT', $slugIt); $slugIt = preg_replace("/[^a-zA-Z0-9 -]/u", "", $slugIt);
私はまだ '雄牛'を得ています。私はiconvの上にpre_replaceを入れてみましたが、喜びはありません。 – pedalpete

0

を参照してください。あなたは、POSIX正規表現を使用して試すことができます:

$slugIt = ereg_replace('[^[:alnum:] -]', '', $slugIt); 
$slugIt = @iconv('UTF-8', 'ASCII//TRANSLIT', $slugIt); 

[:alnum:](アクセント付きのものを含む)任意の英数字の文字と一致します。
PHPのPOSIX実装の詳細についてはhttp://php.net/manual/en/book.regex.phpを見てください。

+0

POSIX正規表現とereg_ *関数は償却され、使用することはお勧めしません。 – zildjohn01

+0

ありがとうzildjohn、私は決してそれを知っていたか、または見えると思った。 – pedalpete

0

これは、間違った文字セットの組み合わせであることがわかりました。また、どのようにwindowsがinconvを処理するのかが分かりました。

最初に、私はiso-8859文字セットを持っていました。ドキュメントの先頭にutf-8を定義していたとしても、phpはその文字セットをISOとして扱っていました。ウィンドウでのiconv使用している場合

第二に、あなたは明らかにASCII // TRANSLIT //はありがたいことに、あなたがウィンドウで行うことができます、IGNORE組み合わせることはできません。

Linux上では、すべてのアクセント記号がベース文字に変換され、アルファベット以外の数字は削除されます。

ここで新しいコードだ

 
    $slugIt = @iconv('iso-8859-1', 'ASCII//TRANSLIT//IGNORE', $slugIt); 
    $slugIt = preg_replace("/[^a-zA-Z0-9]/", "", $slugIt);