当使用 mb_substr() 时,我有一个韩语的
它无法将其检测为 string
(多字节字符串
),使用 UTF-8
编码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 all the way through
� 可能是因为一开始就没有 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。
关于php - 使用 mb_substr() 管理韩语多字节字符串会产生乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994434/