Я пытаюсь заменить на некоторых старых веб-страницах экземпляры кратковременных символов caron, содержащие ханью пиньинь, одну из фонетических систем китайского языка мандарин. (К вашему сведению, символы «breve» имеют диакритическую метку в форме буквы u, а символы «caron» имеют диакритическую метку в форме v)
$content = 'băd cĕf tĭl gŏŭ';
echo preg_replace_callback ( '/[ăĕĭŏŭ]/', function ($match) {
$b2c = array(
"ă"=>"ǎ",
"ĕ"=>"ě",
"ĭ"=>"ǐ",
"ŏ"=>"ǒ",
"ŭ"=>"ǔ");
$letter = $match[0];
return $b2c[$letter];
}, $content);
Когда я использую «return $ letter», я получаю краткие буквы. И когда я звоню $ b2c [«ă»], он возвращает правильную букву Корана. Поэтому я подозреваю, что $ match [0] на самом деле не персонаж, но, перерывая страницы документации, я не смог найти ничего, что могло бы подтвердить эту теорию.
Кстати, я обнаружил, что str_replace работает лучше, чем preg_replace для этой конкретной проблемы, но, для дальнейшего использования, я все же хотел бы знать, почему приведенный выше код не работает.
Задача ещё не решена.
Других решений пока нет …