首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将php中的ascii字母表更改为utf-8

如何将php中的ascii字母表更改为utf-8
EN

Stack Overflow用户
提问于 2022-02-20 05:07:25
回答 2查看 118关注 0票数 -1

我有一个ASCII字符串。我喜欢把它的编码改为utf-8。但是我发现在php中有一个简单的函数可以将ascii更改为utf-8。反过来说,我喜欢把utf-8字母表改成ascii。请给我建议。

我试过:

代码语言:javascript
运行
复制
<?php
// utf-8
$str = "CHONKIOK";  
// I can't even how to print these utf-8 characters in php. I just copied/pasted the string. 
// strlen($str) => 24 bytes
// mb_detect_encoding($str) => utf-8

$str2 = "CHONKIOK";
// strlen($str2) => 8 bytes
// mb_detect_encoding($str2) => ascii

// change ascii to utf-8
$str = mb_convert_encoding($str2, "UTF-8");

echo mb_detect_encoding($str);
// returns ascii
EN

Stack Overflow用户

回答已采纳

发布于 2022-02-20 05:57:22

你所做的是正确的。根据编码,它表示它检测到最有可能是字符编码。

由于整个ASCII集包含在完全相同的字符位置的UTF-8中,这个函数告诉您它是一个ASCII字符串,因为它在技术上是这样的。该字符串的字节在ASCII和UFT-8中编码时是相同的.

正如您已经发现的,当您在ASCII集之外包含一些字符时,它将给您提供下一个可能的编码。

我到底该怎么做才能得到这个字符串:“CHONKIOK”中的"CHONKIOK"?

你所追求的字符被称为“全宽拉丁”字符。

如果提供的字符是字符65,315,而常规的C是字符67,则可以通过添加65,248的差来获得所需的字符串。这是可能的,因为字母表倾向于在字符图表的不同部分以相同的顺序重复。

您可以使用奥德获取字符的代码点,并在添加65,248之后,使用chr将其转换回字符。

看起来可能是这样:

代码语言:javascript
运行
复制
$str_input = "ABC abc 123";
$convertable = "ABCDEFG12349abcdefg";
$str_output = "";

for ($i = 0; $i < strlen($str_input); $i++) {
    $char = mb_ord($str_input[$i], "UTF-8");
    if(str_contains($convertable, $str_input[$i])) $char += 65248;
    $str_output .= mb_chr($char, "UTF-8");
}

echo $str_output;  // outputs "ABC abc 123"

只需确保在$convertable中包含整个字母表

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

https://stackoverflow.com/questions/71191522

复制
相关文章

相似问题

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