首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Utf-8到UTF-16BE

Utf-8到UTF-16BE
EN

Stack Overflow用户
提问于 2012-05-01 19:16:20
回答 1查看 1.1K关注 0票数 1

我在php中保存了一条记录“فحصالرسالةالعربية”,它总是保存为:

代码语言:javascript
复制
فحص الرسالة العربية

当我检索它时,我想把它转换成UTF-16BE字符,所以我使用了一个函数,它返回:

代码语言:javascript
复制
002600230031003600300031003b002600230031003500380031003b002600230031003500380039003b0020002600230031003500370035003b002600230031003600300034003b002600230031003500380035003b002600230031003500380037003b002600230031003500370035003b002600230031003600300034003b002600230031003500370037003b0020002600230031003500370035003b002600230031003600300034003b002600230031003500390033003b002600230031003500380035003b002600230031003500370036003b002600230031003600310030003b002600230031003500370037003b

这是m用来转换从数据库中检索的字符串的函数

代码语言:javascript
复制
function convertCharsn($string) {
    $in = '';
    $out = iconv('UTF-8', 'UTF-16BE', $string);
    for($i=0; $i<strlen($out); $i++) {
      $in .= sprintf("%02X", ord($out[$i]));
    }
    return $in;
}

但当我在下面的url中输入相同的字符时,它显示的字符与我的字符串不同。http://www.routesms.com/downloads/onlineunicode.asp

正在返回:

代码语言:javascript
复制
0641062D063500200627064406310633062706440629002006270644063906310628064A0629

我想我的字符串被转换,因为它是在上述网址转换。我的数据库排序规则是utf-8_general_ci

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-01 21:08:59

基本上,您需要首先从HTML实体中解码出这些字符。只需使用html_entity_decode()即可

代码语言:javascript
复制
$rawChars = html_entity_decode($string, ENT_QUOTES | ENT_HTML401, 'UTF-8');

convertCharsn($rawChars);

否则,您只是对实体进行编码。您可以看到,&在UTF16中是0026,而#0023。因此,您可以在上面发布的代码转换中看到00260023的重复序列。所以先把它解码,然后你就可以...

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

https://stackoverflow.com/questions/10396927

复制
相关文章

相似问题

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