2

éáßöäüURL とファイル名をサニタイズする機能がありeassoauますstr_replace($a, $b, $value)。しかし、中国語、日本語などの言語のすべての文字を置き換えるにはどうすればよいでしょうか? また、判断が難しいために置換できない場合、それらの文字をすべて削除するにはどうすればよいですか? もちろん、最初に上記のようにサニタイズしてから、「非ラテン」文字をすべて削除することもできます。しかし、おそらくそれに対する別の良い解決策がありますか?

編集・追加

コメントで尋ねられたように: 私の質問の目的は何ですか? 最初は英語、ドイツ語、ロシア語のコンテンツを持っていたクライアントがいました。その後、中国語のページがいくつかありました。URL で 2 つの問題が発生しました。

  • 最初のサニタイザーはすべての「ASCII 以外の文字」を削除し、「空白」(無効な) クリーン URL を返した可能性があります。
  • クライアントは、一部のブラウザで中国語の文字を含むクリーンな URL が機能しないことを経験しました。

最初のポイントは、それらの文字を置き換えるショットに私を導きました.もちろん、質問とコメントで述べられているように、それは不可能です. たぶん、誰かが、最新のすべてのブラウザー (IE8 以降) では、これはもう問題ではないと答えています。また、そのことについてもお聞かせいただければ幸いです。

4

3 に答える 3

2

日本語に関しては、例として、通常、ASCII 文字のみを使用し、元の文字の可逆的で理解しやすい表現を提供するすべてのローマ字表現がありますただし、何かをローマ字に翻訳するには、正しい発音を知っている必要があり、それは通常、文字が使用されている意味や文脈によって異なります. そのため、すべてを正しく変換することは、不可能ではないにしても困難になります (または、少なくとも単純なサニタイザーでは効率的に実行できません)。

同じことが中国語にも当てはまりますが、さらに悪いことです。一方、韓国語はローマ字表記に簡単に変換できる非常に単純な文字セットを持っています。ただし、別の一般的な問題は、単一のローマ字化方法がないことです。これらの言語には通常、さまざまな人が使用するさまざまな言語があります (たとえば、日本語には 2 つの一般的なローマ字表記があります)。

したがって、実際に使用している言語に大きく依存します。一部の言語では機能する可能性がありますが、別の問題は、実際に使用している言語を検出することです (たとえば、日本語と中国語は多くの文字を共有していますが、意味、発音、およびローマ字表記は通常互換性がありません)。特にファイル名の単純なサニタイゼーションの場合、これほど多くの作業と処理時間を投資する価値はないと思います。

おそらく、別の方向で作業する必要があります。ファイル名を単純に Unicode ファイル名として機能させることです。実際には、ファイル システム ( ) で本当に無効な文字の数は非常に少ない*|\/:"<>?ため、単純にそれらを除外し、そうでなければ Unicode ファイル名をサポートする方がはるかに簡単です。

于 2012-08-06T16:55:44.393 に答える
1

したがって、私が理解しているように、すべての言語にいくつかの文字関係テーブルが必要であり、このテーブルの関係で文字を置き換えます。
たとえば、ロシア語の記号をラテン語の同義語に変換するには、このテーブルを使用します =) または、このテーブルを使用するクラス =)
興味深いです、私は今それを見つけましたhttp://derickrethans.nl/projects.html#translit

于 2012-08-06T16:16:56.103 に答える