PHP删除重音 - 使用COMBINING ACUTE ACCENT

时间:2017-06-02 15:40:56

标签: php encoding diacritics

我正在尝试使用php批量重命名(删除重音符号)我的文件。但我遇到了一个奇怪的问题。

我有两个(可能更多)不同的字符,它们在大多数字体中都是相同的。但是当我将其转换为二进制时,我会得到不同的结果。第一个是“á”,它是标准的uft字符,第二个(奇怪的)是“á”。我的文件名中有这些,我无法摆脱它们。

我甚至没有在UFT-36表中找到这个。我想它可能与MacOS有关,因为上传此文件的人使用mac。

我已尝试过iconv但它在此char上失败(返回false)。我发现以下数组与str_replace一起使用,但它不包含这些字符。我可能会非常痛苦地手工挑选它们并将它们添加到阵列中。

有谁知道这是什么以及如何摆脱它们?

$invalid = array(
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ā'=>'A', 'Ă'=>'A', 'Ȧ'=>'A', 'Ä'=>'A', 'Ả'=>'A', 'Å'=>'A', 'Ǎ'=>'A', 'Ȁ'=>'A', 'Ȃ'=>'A', 'Ą'=>'A', 'Ạ'=>'A', 'Ḁ'=>'A', 'Ầ'=>'A', 'Ấ'=>'A', 'Ẫ'=>'A', 'Ẩ'=>'A', 'Ằ'=>'A', 'Ắ'=>'A', 'Ẵ'=>'A', 'Ẳ'=>'A', 'Ǡ'=>'A', 'Ǟ'=>'A', 'Ǻ'=>'A', 'Ậ'=>'A', 'Ặ'=>'A',
        'Æ'=>'AE', 'Ǽ'=>'AE', 'Ǣ'=>'AE', 
        'Ḃ'=>'B', 'Ɓ'=>'B', 'Ḅ'=>'B', 'Ḇ'=>'B', 'Ƃ'=>'B', 'Ƅ'=>'B', 'Þ'=>'B',
        'Ĉ'=>'C', 'Ċ'=>'C', 'Č'=>'C', 'Ƈ'=>'C', 'Ç'=>'C', 'Ḉ'=>'C',
        'Ḋ'=>'D', 'Ɗ'=>'D', 'Ḍ'=>'D', 'Ḏ'=>'D', 'Ḑ'=>'D', 'Ḓ'=>'D', 'Ď'=>'D',
        'Đ'=>'Dj', 'Ɖ'=>'Dj',
        'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ẽ'=>'E', 'Ē'=>'E', 'Ĕ'=>'E', 'Ė'=>'E', 'Ë'=>'E', 'Ẻ'=>'E', 'Ě'=>'E', 'Ȅ'=>'E', 'Ȇ'=>'E', 'Ẹ'=>'E', 'Ȩ'=>'E', 'Ę'=>'E', 'Ḙ'=>'E', 'Ḛ'=>'E', 'Ề'=>'E', 'Ế'=>'E', 'Ễ'=>'E', 'Ể'=>'E', 'Ḕ'=>'E', 'Ḗ'=>'E', 'Ệ'=>'E', 'Ḝ'=>'E', 'Ǝ'=>'E', 'Ɛ'=>'E', 
        'Ḟ'=>'F', 'Ƒ'=>'F', 
        'Ǵ'=>'G', 'Ĝ'=>'G', 'Ḡ'=>'G', 'Ğ'=>'G', 'Ġ'=>'G', 'Ǧ'=>'G', 'Ɠ'=>'G', 'Ģ'=>'G', 'Ǥ'=>'G', 
        'Ĥ'=>'H', 'Ḧ'=>'H', 'Ȟ'=>'H', 'Ƕ'=>'H', 'Ḥ'=>'H', 'Ḩ'=>'H', 'Ḫ'=>'H', 'Ħ'=>'H',
        'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ĩ'=>'I', 'Ī'=>'I', 'Ĭ'=>'I', 'İ'=>'I', 'Ï'=>'I', 'Ỉ'=>'I', 'Ǐ'=>'I', 'Ị'=>'I', 'Į'=>'I', 'Ȉ'=>'I', 'Ȋ'=>'I', 'Ḭ'=>'I', 'Ɨ'=>'I', 'Ḯ'=>'I', 
        'IJ'=>'IJ',
        'Ĵ'=>'J',
        'Ḱ'=>'K', 'Ǩ'=>'K', 'Ḵ'=>'K', 'Ƙ'=>'K', 'Ḳ'=>'K', 'Ķ'=>'K', 'Ĺ'=>'L', 'Ḻ'=>'L', 'Ḷ'=>'L', 'Ļ'=>'L', 'Ḽ'=>'L', 'Ľ'=>'L', 'Ŀ'=>'L', 'Ł'=>'L', 'Ḹ'=>'L', 
        'Ḿ'=>'M', 'Ṁ'=>'M', 'Ṃ'=>'M', 'Ɯ'=>'M', 'Ñ'=>'N', 'Ǹ'=>'N', 'Ń'=>'N', 'Ñ'=>'N', 'Ṅ'=>'N', 'Ň'=>'N', 'Ŋ'=>'N', 'Ɲ'=>'N', 'Ṇ'=>'N', 'Ņ'=>'N', 'Ṋ'=>'N', 'Ṉ'=>'N', 'Ƞ'=>'N',
        'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ō'=>'O', 'Ŏ'=>'O', 'Ȯ'=>'O', 'Ö'=>'O', 'Ỏ'=>'O', 'Ő'=>'O', 'Ǒ'=>'O', 'Ȍ'=>'O', 'Ȏ'=>'O', 'Ơ'=>'O', 'Ǫ'=>'O', 'Ọ'=>'O', 'Ɵ'=>'O', 'Ø'=>'O', 'Ồ'=>'O', 'Ố'=>'O', 'Ỗ'=>'O', 'Ổ'=>'O', 'Ȱ'=>'O', 'Ȫ'=>'O', 'Ȭ'=>'O', 'Ṍ'=>'O', 'Ṑ'=>'O', 'Ṓ'=>'O', 'Ờ'=>'O', 'Ớ'=>'O', 'Ỡ'=>'O', 'Ở'=>'O', 'Ợ'=>'O', 'Ǭ'=>'O', 'Ộ'=>'O', 'Ǿ'=>'O', 'Ɔ'=>'O', 'Œ'=>'OE',
        'Ṕ'=>'P', 'Ṗ'=>'P', 'Ƥ'=>'P',
        'Ŕ'=>'R', 'Ṙ'=>'R', 'Ř'=>'R',   'Ȑ'=>'R', 'Ȓ'=>'R', 'Ṛ'=>'R', 'Ŗ'=>'R', 'Ṟ'=>'R', 'Ṝ'=>'R', 'Ʀ'=>'R',
        'Ś'=>'S', 'Ŝ'=>'S', 'Ṡ'=>'S', 'Š'=>'S', 'Ṣ'=>'S', 'Ș'=>'S', 'Ş'=>'S', 'Ṥ'=>'S', 'Ṧ'=>'S', 'Ṩ'=>'S',
        'Ṫ'=>'T', 'Ť'=>'T', 'Ƭ'=>'T', 'Ʈ'=>'T', 'Ṭ'=>'T', 'Ț'=>'T', 'Ţ'=>'T', 'Ṱ'=>'T', 'Ṯ'=>'T', 'Ŧ'=>'T', 
        'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ũ'=>'U', 'Ū'=>'U', 'Ŭ'=>'U', 'Ü'=>'U', 'Ủ'=>'U', 'Ů'=>'U', 'Ű'=>'U', 'Ǔ'=>'U', 'Ȕ'=>'U', 'Ȗ'=>'U', 'Ư'=>'U', 'Ụ'=>'U', 'Ṳ'=>'U', 'Ų'=>'U', 'Ṷ'=>'U', 'Ṵ'=>'U',   'Ṹ'=>'U', 'Ṻ'=>'U', 'Ǜ'=>'U', 'Ǘ'=>'U', 'Ǖ'=>'U', 'Ǚ'=>'U', 'Ừ'=>'U',   'Ứ'=>'U', 'Ữ'=>'U', 'Ử'=>'U', 'Ự'=>'U',
        'Ṽ'=>'V', 'Ṿ'=>'V', 'Ʋ'=>'V',
        'Ẁ'=>'W', 'Ẃ'=>'W', 'Ŵ'=>'W', 'Ẇ'=>'W', 'Ẅ'=>'W', 'Ẉ'=>'W',
        'Ẋ'=>'X', 'Ẍ'=>'X',
        'Ỳ'=>'Y', 'Ý'=>'Y', 'Ŷ'=>'Y', 'Ỹ'=>'Y', 'Ȳ'=>'Y', 'Ẏ'=>'Y', 'Ÿ'=>'Y', 'Ỷ'=>'Y', 'Ƴ'=>'Y', 'Ỵ'=>'Y',
        'Ź'=>'Z', 'Ẑ'=>'Z', 'Ż'=>'Z', 'Ž'=>'Z', 'Ȥ'=>'Z', 'Ẓ'=>'Z', 'Ẕ'=>'Z', 'Ƶ'=>'Z',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ā'=>'a', 'ă'=>'a', 'ȧ'=>'a', 'ä'=>'a', 'ả'=>'a', 'å'=>'a', 'ǎ'=>'a', 'ȁ'=>'a', 'ą'=>'a', 'ạ'=>'a', 'ḁ'=>'a', 'ẚ'=>'a', 'ầ'=>'a', 'ấ'=>'a', 'ẫ'=>'a', 'ẩ'=>'a', 'ằ'=>'a', 'ắ'=>'a', 'ẵ'=>'a', 'ẳ'=>'a', 'ǡ'=>'a', 'ǟ'=>'a', 'ǻ'=>'a', 'ậ'=>'a', 'ặ'=>'a', 
        'æ'=>'ae', 'ǽ'=>'ae', 'ǣ'=>'ae', 
        'ḃ'=>'b', 'ɓ'=>'b', 'ḅ'=>'b', 'ḇ'=>'b', 'ƀ'=>'b', 'ƃ'=>'b', 'ƅ'=>'b', 'þ'=>'b',
        'ć'=>'c', 'ĉ'=>'c', 'ċ'=>'c', 'č'=>'c', 'ƈ'=>'c', 'ç'=>'c', 'ḉ'=>'c',
        'ḋ'=>'d', 'ɗ'=>'d', 'ḍ'=>'d', 'ḏ'=>'d', 'ḑ'=>'d', 'ḓ'=>'d', 'ď'=>'d', 'đ'=>'d', 'ƌ'=>'d', 'ȡ'=>'d',
        'đ'=>'dj',
        'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ẽ'=>'e', 'ē'=>'e', 'ĕ'=>'e', 'ė'=>'e', 'ë'=>'e', 'ẻ'=>'e', 'ě'=>'e', 'ȅ'=>'e', 'ȇ'=>'e', 'ẹ'=>'e', 'ȩ'=>'e', 'ę'=>'e', 'ḙ'=>'e', 'ḛ'=>'e', 'ề'=>'e', 'ế'=>'e',           'ễ'=>'e', 'ể'=>'e', 'ḕ'=>'e', 'ḗ'=>'e', 'ệ'=>'e', 'ḝ'=>'e', 'ǝ'=>'e', 'ɛ'=>'e', 
        'ḟ'=>'f', 'ƒ'=>'f', 
        'ǵ'=>'g', 'ĝ'=>'g', 'ḡ'=>'g', 'ğ'=>'g', 'ġ'=>'g', 'ǧ'=>'g', 'ɠ'=>'g', 'ģ'=>'g', 'ǥ'=>'g',
        'ĥ'=>'h', 'ḣ'=>'h', 'ḧ'=>'h', 'ȟ'=>'h', 'ƕ'=>'h', 'ḥ'=>'h', 'ḩ'=>'h', 'ḫ'=>'h', 'ẖ'=>'h', 'ħ'=>'h',
        'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ĩ'=>'i', 'ī'=>'i', 'ĭ'=>'i', 'ı'=>'i', 'ï'=>'i', 'ỉ'=>'i', 'ǐ'=>'i', 'ị'=>'i', 'į'=>'i', 'ȉ'=>'i', 'ȋ'=>'i', 'ḭ'=>'i',  'ɨ'=>'i', 'ḯ'=>'i',
        'ij'=>'ij',
        'ĵ'=>'j', 'ǰ'=>'j', 
        'ḱ'=>'k', 'ǩ'=>'k', 'ḵ'=>'k', 'ƙ'=>'k', 'ḳ'=>'k', 'ķ'=>'k',
        'ĺ'=>'l', 'ḻ'=>'l', 'ḷ'=>'l', 'ļ'=>'l', 'ḽ'=>'l', 'ľ'=>'l', 'ŀ'=>'l', 'ł'=>'l', 'ƚ'=>'l', 'ḹ'=>'l', 'ȴ'=>'l', 
        'ḿ'=>'m', 'ṁ'=>'m', 'ṃ'=>'m', 'ɯ'=>'m', 
        'ǹ'=>'n', 'ń'=>'n', 'ñ'=>'n', 'ṅ'=>'n', 'ň'=>'n', 'ŋ'=>'n', 'ɲ'=>'n', 'ṇ'=>'n', 'ņ'=>'n', 'ṋ'=>'n', 'ṉ'=>'n', 'ʼn'=>'n', 'ƞ'=>'n', 'ȵ'=>'n',
        'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ō'=>'o', 'ŏ'=>'o', 'ȯ'=>'o', 'ö'=>'o', 'ỏ'=>'o', 'ő'=>'o', 'ǒ'=>'o', 'ȍ'=>'o', 'ȏ'=>'o', 'ơ'=>'o', 'ǫ'=>'o', 'ọ'=>'o', 'ɵ'=>'o', 'ø'=>'o', 'ồ'=>'o', 'ố'=>'o', 'ỗ'=>'o', 'ổ'=>'o', 'ȱ'=>'o', 'ȫ'=>'o', 'ȭ'=>'o', 'ṍ'=>'o', 'ṏ'=>'o', 'ṑ'=>'o', 'ṓ'=>'o', 'ờ'=>'o', 'ớ'=>'o', 'ỡ'=>'o', 'ở'=>'o', 'ợ'=>'o', 'ǭ'=>'o', 'ộ'=>'o', 'ǿ'=>'o', 'ɔ'=>'o', 
        'œ'=>'oe',
        'ṕ'=>'p', 'ṗ'=>'p', 'ƥ'=>'p', 
        'ŕ'=>'r', 'ṙ'=>'r', 'ř'=>'r', 'ȑ'=>'r', 'ȓ'=>'r', 'ṛ'=>'r', 'ŗ'=>'r', 'ṟ'=>'r', 'ṝ'=>'r',
        'ś'=>'s', 'ŝ'=>'s', 'ṡ'=>'s', 'š'=>'s', 'ṣ'=>'s', 'ș'=>'s', 'ş'=>'s', 'ṥ'=>'s', 'ṧ'=>'s', 'ṩ'=>'s', 'ſ'=>'s', 'ẛ'=>'s',
        'ß'=>'Ss',          
        'ṫ'=>'t', 'ẗ'=>'t', 'ť'=>'t', 'ƭ'=>'t', 'ʈ'=>'t', 'ƫ'=>'t', 'ṭ'=>'t', 'ț'=>'t', 'ţ'=>'t', 'ṱ'=>'t', 'ṯ'=>'t', 'ŧ'=>'t', 'ȶ'=>'t',
        'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ũ'=>'u', 'ū'=>'u', 'ŭ'=>'u', 'ü'=>'u', 'ủ'=>'u', 'ů'=>'u', 'ű'=>'u', 'ǔ'=>'u', 'ȕ'=>'u', 'ȗ'=>'u', 'ư'=>'u', 'ụ'=>'u', 'ṳ'=>'u', 'ų'=>'u', 'ṷ'=>'u', 'ṵ'=>'u', 'ṹ'=>'u', 'ṻ'=>'u', 'ǜ'=>'u', 'ǘ'=>'u', 'ǖ'=>'u', 'ǚ'=>'u', 'ừ'=>'u', 'ứ'=>'u', 'ữ'=>'u', 'ử'=>'u', 'ự'=>'u', 
        'ṽ'=>'v', 'ṿ'=>'v', 
        'ẁ'=>'w', 'ẃ'=>'w', 'ŵ'=>'w', 'ẇ'=>'w', 'ẅ'=>'w', 'ẘ'=>'w', 'ẉ'=>'w',
        'ẋ'=>'x', 'ẍ'=>'x', 
        'ý'=>'y', 'ý'=>'y', 'ỳ'=>'y', 'ý'=>'y', 'ŷ'=>'y', 'ȳ'=>'y', 'ẏ'=>'y', 'ÿ'=>'y', 'ÿ'=>'y', 'ỷ'=>'y', 'ẙ'=>'y', 'ƴ'=>'y', 'ỵ'=>'y',
        'ź'=>'z', 'ẑ'=>'z', 'ż'=>'z', 'ž'=>'z', 'ȥ'=>'z', 'ẓ'=>'z', 'ẕ'=>'z', 'ƶ'=>'z',
        '№'=>'No',
        'º'=>'o',
        'ª'=>'a',
        '€'=>'E',
        '©'=>'C',
        '℗'=>'P',
        '™'=>'tm',
        '℠'=>'sm',
        '’' => '',
        '_'=>'-',
        '%20'=>'-'
    );
编辑:我发现它更像是两个字符十一个。当你复制粘贴并点击退格时,它首先删除重音而不是角色本身。

EDIT2:它是COMBINING ACUTE ACCENT的角色。可以使用PHP类Normalizer进行规范化。

1 个答案:

答案 0 :(得分:2)

喜欢@Casimir et Hippolyte指出:

  

在UTF-8中有两种表示重音字母的方式:第一种使用单个unicode点:U + 00E1:LATIN SMALL LETTER A WITH ACUTE,第二种使用两个unicode点:U + 0061:LATIN小写字母A和组合字符:U + 0301:组合ACUTE ACCENT。使用intl包,可以强制字符串在可能的情况下为所有字形使用唯一的代码点

可以使用PHP Normalizer类http://php.net/normalizer对它们进行规范化。

所以首先我需要对它们进行标准化,而不是替换。

感谢所有试图提供帮助的人。