php - 使用 mb_substr() 管理韩语多字节字符串会产生乱码

标签 php mysql string character-encoding cjk

当使用 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/

相关文章:

c++ - 我在这里用 find 和 string 做错了什么?

php - 如何在 php 中循环更新查询并显示它,使其像日志历史记录一样

php - Zend Session、Zend_Session_SaveHandler_DbTable 和异步请求

MySQL join with where 子句

python - MySQLdb Python - 测试数据库

php - 需要获取2个字段的字段值

php - 如何获得以微秒为单位的持续时间

php - 如何使用纯 token ( token 作为字符串)从 Controller $jwtManager->decode($jwt) 解析 jwt token

python - 在Python中实现rfind

java - 带有特殊/unicode 字符的 toLowerCase 会引发异常