首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mb_substr()管理韩语多字节字符串会产生胡言乱语

使用mb_substr()管理韩语多字节字符串会产生胡言乱语
EN

Stack Overflow用户
提问于 2015-10-07 14:05:54
回答 1查看 325关注 0票数 2

我有一个韩语string (multi byte string),使用UTF-8编码,当使用mb_substr()时,它无法检测到multi byte,因此mb_substr()就像substr()一样工作,而我在string的末尾得到了像"�“这样的乱七八糟的字符。

星期三大象键盘开裂青蛙混杂纪念碑问题面包车斑马线수요일코끼리키보드개구리뒤범벅비석이질문에반얼룩말을크래킹

同样使用mb_detect_encoding(),我得到了UTF-8,有什么想法我错在哪里?

我正在使用的当前功能是:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-26 02:30:07

不要使用任何mb或utf8tohtml函数。说明每个阶段的一切都是utf8。请参阅UTF-8 all the way through

utf8可能来自于从一开始就没有SET NAMES latin1字符,并且使用默认的SET NAMES latin1而不是SET NAMES utf8

你的短信是EUCKR吗?请提供一些字符的巫术,我可能会进一步挖掘。

此外,请这样做,看看表中有什么:

代码语言:javascript
复制
SELECT col, HEX(col) FROM tbl WHERE ...

这将提供一个线索,看看这些数据是被弄得乱七八糟的,还是被弄得乱七八糟的。

正确地用utf8 (或utf8mb4)编码,星期三是十六进制E6989F E69C9F E4B889보드 개是十六进制EBB3B4 EB939C 20 EAB09C (为了清晰起见,我添加了空格)。

你所拥有的是汉语和韩语的结合,对吗?我强烈建议始终使用utf8mb4。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32994434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档