0

我必须将 UTF-8 字符串转换为非 UTF-8 字符串,我想替换:

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

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

Ợ,Ỡ,Ở,Ờ,Ớ,Ơ,Ộ,Ỗ,Ổ,Ồ,Ố,Ô,Ọ,Õ,Ỏ,Ò,ÓO ... 以及更多相同的情况

通过 php preg_replace()

我可以使用吗?:

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

3 回答 3

1

由于正则表达式不是解决这个问题的最佳方法,我可以提示一下 PHPiconv工具:

$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

如果删除 ,您可以,将所有内容放在字符类中,/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 回答
0

我只在 Java 中做过一次,但在 php 中的技巧是相似的。

在 unicode 中,如果您进行规范化,则使用组合变音符号(即一个字母和一个符号)对变音符号进行编码。只需放下符号,您就完成了。

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 回答