Php 在Codeigniter中如何将UTF-8十六进制字符串解码为正确的英语
我有codeigniter框架的搜索功能,今天我注意到一些人正在传递字符串,比如Á,ú,ç,é 当输入通过codeigniter核心输入传递时,它将转换为%C3%81、%C3%BA、%C3%A7、%C3%A9,我使用了以下codeigniter助手Php 在Codeigniter中如何将UTF-8十六进制字符串解码为正确的英语,php,codeigniter,utf-8,Php,Codeigniter,Utf 8,我有codeigniter框架的搜索功能,今天我注意到一些人正在传递字符串,比如Á,ú,ç,é 当输入通过codeigniter核心输入传递时,它将转换为%C3%81、%C3%BA、%C3%A7、%C3%A9,我使用了以下codeigniter助手 $this->load->helper('text'); convert_accented_characters('è'); // output: e 它将è转换为e,但如何将UTF-8-HEX'%C3%A9'或'c3a9'转换为正确
$this->load->helper('text');
convert_accented_characters('è'); // output: e
它将è转换为e,但如何将UTF-8-HEX'%C3%A9'或'c3a9'转换为正确的英文字符,如A、u、c、e您可以使用PHP的内置函数进行UTF-8解码:
utf8_decode(string);
如果您的PHP版本大于或等于5.4,您可以尝试使用音译类
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
$test = ['Á', 'ú', 'ç', 'é','Áúçé'];
foreach($test as $e) {
$normalized = $transliterator->transliterate($e);
echo $e. ' --> '.$normalized."\r\n";
}
输出:
Á --> A ú --> u ç --> c é --> e Áúçé --> Auce
*默认情况下,它将被禁用。应该在php.ini文件中启用它才能使用此功能
更新:
看起来您的数据是URL编码的。因此,您必须使用urlencode
函数
urldecode("%C3%81, %C3%BA, %C3%A7, %C3%A9"); // Á, ú, ç, é
然后您可以使用CI功能将è
转换为e
,您已经在使用它了
convert_accented_characters('è'); // output: e
我有十六进制字符,如:%C3%81、%C3%BA、%C3%A7、%C3%A9,问题是如何将以下十六进制代码转换为正确的字符,更新了我的答案。检查,它可能会帮助你。我已经尝试过,回声utf8_解码('c3a9');它不能将十六进制转换为字符。