请知悉:本文最近一次更新为 9年 前,文中内容可能已经过时。

同事采集东西回来写到SQLite后有类似这样的源码:

trituración

这玩意儿前台展示出来是正常的- -至少看起来,但是后台处理就不一样了,需要转码下才能到正常字符串,检索了一下,找到一篇完整的php函数,原封不动摘录代码如下:

<?php
function uni($str){
$ret = '';
for ($i = 0; $i < mb_strlen($str, 'utf-8'); $i = $i + 1) {
$ret .= "&#" . uniord(mb_substr($str, $i, 1, 'utf-8')) . ";";
}
return $ret;
}
function uniord($u){
$c = unpack("N", mb_convert_encoding($u, 'UCS-4BE', 'UTF-8'));
return $c[1];
}
function unichr($u){
return mb_convert_encoding(pack("N", $u), mb_internal_encoding(), 'UCS-4BE');
}
function u2utf8($c){
$str = "";
if ($c < 0x80) {
$str .= chr($c);
} else if ($c < 0x800) {
$str .= chr(0xC0 | $c >> 6);
$str .= chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str .= chr(0xE0 | $c >> 12);
$str .= chr(0x80 | $c >> 6 & 0x3F);
$str .= chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str .= chr(0xF0 | $c >> 18);
$str .= chr(0x80 | $c >> 12 & 0x3F);
$str .= chr(0x80 | $c >> 6 & 0x3F);
$str .= chr(0x80 | $c & 0x3F);
}
return $str;
}
$source = '好好学习,天天向上';
$source = uni($source);
var_dump($source);
// string(69) "好好学习,天天向上" //
preg_match_all("/&#([0-9]+);/", $source, $regs);
var_dump($regs);
foreach ($regs[1] as $v) {
$source = str_replace("&#$v;", u2utf8($v), $source);
}
var_dump($source);
// string(25) "好好学习,天天向上" //

代码完整搬自:https://blog.chinaunix.net/uid-20410459-id-443189.html


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《unicode十进制内码与utf-8编码字符串相互转化》相关的博文:


留言

avatar
😀
😀😁😂😅😭🤭😋😘🤔😰😱🤪💪👍👎🤝🌹👌