17 октября 2012 г.

php, utf8 и умлауты

Понадобилось мне сделать фильтрацию списка кейвордов, отдаваемых GKT. Казалось бы, велика задача, перечислить в регулярке допустимые символы и удалить остальные. И всё было бы так просто, если бы половина пользователей не была родом из европы и их кейворды не включали так называемые умлауты.

Казалось бы регулярка '/[^\w]/ui' должна удалить всё, что не входит в юникодовое \w. Оказалось, умлауты туда не включены. Если точнее, в \w попадают символы той локали, под которой регулярки были собраны в системе. Поэтому даже обычный арабский текст не прошёл =(

Решение заключалось в Unicode Character Properties. В моём случае хватило \p{L} для поддержки всех языков и написаний, а также модификаторов и умлаутов. Однако для арабских языков и другой ерунды понадобится ещё \p{M}

Комментариев нет: