我和角色和编码从未得到过,我想知道是否有人可以帮助解决我正在努力解决的问题。它很可能是一个编码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”
由于
答案 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。