cf @tchrist, с расширением INTL php
http://fr2.php.net/manual/en/book.intl.php
preg_replace('/\pM*/u','',normalizer_normalize( $mystring, Normalizer::FORM_D));
eeèêëiîïoöôuùûüaâäÅ Ἥ ŐǟǠ ǺƶƈƉųŪŧȬƀ␢ĦŁȽŦ ƀǖ становится
eeeeeiiiooouuuuaaaA Η OaA AƶƈƉuUŧOƀ␢ĦŁȽŦ ƀu
Как подчеркивает Трист, не все символы Юникода считаются разложимыми:
извлечение из диаграмм Юникода:
U0080.pdf
00CF Ï ПИСЬМО ЛАТИНСКОГО КАПИТАЛА I С ДИАРЕЗОМ
≡ 0049 I 0308 ¨
NB этот символ «≡» обозначает доступное разложение
00D0 Ð ПИСЬМО ЛАТИНСКОГО КАПИТАЛА ETH
→ 00F0 ð латинская строчная буква eth
→ 0110 Đ латинская заглавная буква d со штрихом
→ 0189 Ɖ латинская заглавная букваd
нет декомпозиции, ИМХО странно (мы могли бы считать букву D ASCII приемлемым эквивалентом).
U0100.pdf
0110 Đ ЛАТИНСКИЙКАПИТАЛЬНОЕ ПИСЬМО D WITH STROKE
→ 00D0 ì латинская заглавная буква eth
→ 0111 small латинская строчная буква d со штрихом
→ 0189 Ɖ латинская заглавная буква африканский d
даже незнакомец: этот текст обозначен как LATIN CAPITAL LETTER D (с ударом), но не разлагается как таковой!Возможно, более удачное решение должно заключаться в том, чтобы получить описание в юникоде каждого символа и сравнить его с описанием каждого символа ascii (и заменить соответственно).Кто-нибудь?; -]
ср http://unicode.org/Public/UNIDATA/UnicodeData.txt