0

UTF-8 文字列を非 UTF-8 文字列に変換する必要があるため、次のものを置き換えます。

Ậ,Ẫ,Ẩ,Ầ,Ấ,Â,Ặ,Ẵ,Ẳ,Ằ,Ắ,Ă,Ạ,Ã,Ả,À,Á to A ,

Ự,Ữ,Ử,Ừ,Ứ,Ư,Ụ,Ũ,Ủ,Ù,Ú to U ,

Ợ,Ỡ,Ở,Ờ,Ớ,Ơ,Ộ,Ỗ,Ổ,Ồ,Ố,Ô,Ọ,Õ,Ỏ,Ò,ÓO ... と同じケースでさらに多く

phpでpreg_replace()

使用してもいいですか?:

$string = preg_replace('/Ậ,Ẫ,Ẩ,Ầ,Ấ,Â,Ặ,Ẵ,Ẳ,Ằ,Ắ,Ă,Ạ,Ã,Ả,À,Á/', 'A', $string);
$string = preg_replace('/Ợ,Ỡ,Ở,Ờ,Ớ,Ơ,Ộ,Ỗ,Ổ,Ồ,Ố,Ô,Ọ,Õ,Ỏ,Ò,Ó/', 'O', $string);
$string = preg_replace('/Ự,Ữ,Ử,Ừ,Ứ,Ư,Ụ,Ũ,Ủ,Ù,Ú/', 'U', $string);
4

3 に答える 3

1

iconv正規表現はこれを解決するための最適な方法ではないので、PHPの機能をほのめかしてください。

$string = 'ỬỪỨƯỤ';

// temporarily switch locale
$locale = setlocale(LC_CTYPE, 'en_US.UTF-8');
// use iconv to transliterate
$string = iconv('utf-8', 'us-ascii//TRANSLIT', $string);
// restore locale
setlocale(LC_CTYPE, $locale);

// $string is now "UUUUU"
于 2013-01-15T17:55:39.017 に答える
0

Java でこれを行ったのは 1 回だけですが、php でも同様の方法になります。

Unicode では、正規化すると、分音記号は分音記号の組み合わせ、つまり 1 文字と 1 つの記号を使用してエンコードされます。シンボルをドロップするだけで完了です。

private static final Pattern DIACRITIC =
        Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");


public static String replaceCombiningDiacriticalMarks(String text) {
    return DIACRITIC.matcher(Normalizer.normalize(text, Normalizer.Form.NFKD)).replaceAll("");
}

他のアルファベットの文字や数学記号もある場合、事態はさらに複雑になります。それらを純粋な ascii に置き換えることはまだ可能ですが (たとえば、√ を av に置き換えるなど)、どの文字を選択するかは任意です。

于 2013-01-15T18:11:56.357 に答える
0

を削除すると,、すべてを文字クラス内に配置し/u、入力文字列が UTF-8 の場合は修飾子を追加できます。例:

preg_replace('/[ỰỮỬỪỨƯỤŨỦÙÚ]/u', 'U', $string);

次のものも使用できますstr_replace()

str_replace(array('Ự', 'Ữ', ...), 'U', $string);

またはstrtr():

strtr($string, 'ỰỮỬ', 'UUU');
于 2013-01-15T17:49:31.727 に答える