у меня есть string
по-корейски (multi byte string
), с UTF-8
кодирование, при использовании mb_substr()
он не может обнаружить его как multi byte
и поэтому mb_substr()
работает как substr()
и я заканчиваю тем, что получаю бессмысленные символы, такие как « » в конце string
,
象 大象 键盘 开裂 青蛙 混杂 纪念碑 问题 面包车 수요일 수요일 키보드 개구리 뒤범벅 뒤범벅 질문 질문 에 반 얼룩말 을 크래킹
Также используя mb_detect_encoding()
я получил UTF-8
Любые идеи, где я иду не так?
Текущая функция, которую я использую:
function cleanseData($data, $mode = false, $limit = 0) {
if ($mode) {
$data = (mb_strlen ( $data ) > ($limit + 3)) ? mb_substr ( $data, 0, $limit, mb_detect_encoding($data) ) . '...' : $data;
}
$data = utf8tohtml ( $data, true );
return $data;
}
Не используйте никакие функции mb или utf8tohtml. Укажите все на каждом этапе — это utf8. Увидеть UTF-8 полностью
, вероятно, происходит из-за того, что в первую очередь нет символов utf8 и используется значение по умолчанию SET NAMES latin1
вместо SET NAMES utf8
,
Может ли быть так, что ваш текст EUCKR? Пожалуйста, предоставьте гекс для некоторого персонажа; Я могу копать дальше.
Также, пожалуйста, сделайте это, чтобы увидеть, что в таблице:
SELECT col, HEX(col) FROM tbl WHERE ...
Это даст ключ к пониманию того, были ли данные искажены в стол или искалеченный приход из.
Правильно закодировано в utf8 (или utf8mb4), 星期三
шестнадцатеричный E6989F E69C9F E4B889
, а также 보드 개
шестнадцатеричный EBB3B4 EB939C 20 EAB09C
(Я добавил пробелы для ясности.)
Что у вас есть сочетание китайского и корейского, правильно? Я настоятельно рекомендую utf8mb4 во всем.
Других решений пока нет …