Получить iconv, чтобы преобразовать мою строку - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть следующая строка:

ᴰᴶ Bagi

Можно ли позволить iconv превратить его в DJ Bagi?

Сначала я попробовал:

$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

Что привело к следующему уведомлению:

Notice: iconv() [function.iconv]: Detected an illegal character in input string 

На сайте PHP я видел кого-то, использующего:

//IGNORE//TRANSLIT

Хотя это предотвращает уведомление, которое я получаю только:

Bagi

1 Ответ

3 голосов
/ 15 апреля 2011

Сначала я думал, что это проблема кодирования с вашей стороны, но если я скопирую + вставлю эти символы локально со страницы источника soundcloud:

ᴰᴶ Bagi

и попробуй их иконить, я получаю тот же результат, что и ты. Это означает, что данные имеют формат UTF-8, но iconv не распознает как «дочерний элемент» D. Невозможно преобразовать символ, он жалуется (немного вводит в заблуждение ИМО) о недопустимом символе.

Редактировать: Это действительно так. Верхний индекс D не входит в диапазон Надстрочные и юникодные индексы , но это фонетический символ . Вероятно, поэтому они не могут быть сопоставлены с их «родительским» письмом. Здесь больше информации о

Насколько я вижу, ваш единственный выбор - заменить символы вручную.

Самый примитивный пример замены -

str_replace("ᴰ", "D", $string);

(обратите внимание, что ваш исходный файл должен быть сохранен как UTF-8, чтобы это работало)

Для элегантного решения вы можете создать массив из исходных и замещающих символов и передать его в вызов str_replace.

Или позвоните ди-джею Баги и скажите ему, чтобы он разобрался с чертовыми буквами. Вы заметите, что в построителе URL Soundcloud возникла точно такая же проблема.

soundcloud.com/bagi 
...