UTF8输出问题Laravel PHP

时间:2018-03-17 12:28:25

标签: php utf-8 character-encoding

我和角色和编码从未得到过,我想知道是否有人可以帮助解决我正在努力解决的问题。它很可能是一个编码101问题,虽然已经搜索过文档,论坛等,但我找不到解决方案。

我的环境:

XAMMP上的Laravel 5.5(Windows)

我的数据库的名称如下: “D \ xc3 \ xacaz de la Pe \ xc3 \ xb1a”

哪个会输出为“DíazdelaPeña”

根据UT8图表,这些字符是正确的: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=128&number=128&names=-&utf8=string-literal

以这种格式保存到数据库时出错了吗?它们应该以其他方式编码吗?

或者我只是没有正确输出它。我试过utf8_encode和utf8_decode,我似乎得到的唯一输出是“D \ xc3 \ xacaz de la Pe \ xc3 \ xb1a”

由于

1 个答案:

答案 0 :(得分:0)

您可以使用preg_replace_callback()替换\xXX值,使用hexdec()chr()

$str = 'D\xc3\xacaz de la Pe\xc3\xb1a' ;
$str = preg_replace_callback('~\\\\x([a-f0-9]{2})~', function($match) {
    return chr(hexdec($match[1]));
}, $str);
echo $str ;

输出:

"Dìaz de la Peña"

上面的代码采用与\x匹配的所有字符串,后跟2个十六进制字符。然后,使用hexdec()将它们转换为十进制值,最后使用chr()转换为字符。

您也可以将[a-f0-9]替换为[[:xdigit:]]

'~\\\\x([[:xdigit:]]{2})~'

以下是匹配的demo

相关问题