Как вы получаете глиф для символа, закодированного как 'ō' из поля базы данных в кодировке utf-8, используя php? - PullRequest
2 голосов
/ 22 апреля 2010

У меня есть таблица базы данных MySQL с сопоставлением 'utf8_general_ci', и значение в поле:

x & # 299; Бан Я (без пробелов).

Когда это конвертируется (например, редактором StackOverflow), это выглядит так:

XI BAN YEN WEN

, где второй символ выглядит как строчная буква i с полосой сверху.

В PHP какая функция преобразует & # 299; сущность в персонаже?

Я пытался использовать html_entity_decode ($ str, ENT_COMPAT, 'UTF-8'), однако я получаю символы, подобные следующим:

yÄ «n wen или zhÅ • ng wén

Я почти уверен, что что-то не понимаю в декодировании, поэтому я использую неправильную функцию. Может кто-нибудь пролить свет на то, как получить односимвольный глиф, представленный сущностью & # 299 и аналогичными символами с большим числом выше 255?

Большое спасибо, AE

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

UTF-8 - это многобайтовая кодировка . Таким образом, если вы посмотрите на это с помощью однобайтовой кодировки, такой как Latin-1, вы увидите нечто похожее на результаты, которые вы видите. Установите кодировку документа в UTF-8, чтобы увидеть реальный символ.

Что касается вашего первого вопроса, это фактически браузер, который декодирует ссылку на символ и печатает символ, а не PHP.

0 голосов
/ 23 апреля 2010

Предлагаю вам прочитать эту страницу: Юникод для работающего программиста PHP . Это не долго, и это должно вывести вас из-за горба и в уверенный Unicode и UTF-8.

Как только вы освоитесь с этими вещами, проверьте расширения PHP mbstring и intl , которые очень удобны. И знать, какие строковые функции в PHP являются и не безопасны для использования в многобайтовых строках. Вот заметок, которые я сделал , когда переходил на сайт в UTF-8, который содержит список непослушных строковых функций.

...