PHP和重音字符(Ba\u015f\u00e7\u0131l)
我有一个类似“Ba\u015f\u00e7\u0131l”的字符串。我想这些是一些特殊的口音字符。我如何: 1) 用重音符号显示字符串(即用实际字符替换代码) 2) 存储这样的字符串的最佳实践是什么 2) 如果我不想允许这样的字符,我如何用“普通字符”替换它PHP和重音字符(Ba\u015f\u00e7\u0131l),php,Php,我有一个类似“Ba\u015f\u00e7\u0131l”的字符串。我想这些是一些特殊的口音字符。我如何: 1) 用重音符号显示字符串(即用实际字符替换代码) 2) 存储这样的字符串的最佳实践是什么 2) 如果我不想允许这样的字符,我如何用“普通字符”替换它 输出它们将输出适当的字符。如果您没有为输出文档提供任何编码,浏览器将尝试猜测要显示的最佳编码。否则,您应该找出它并显式输出 只需存储它们,或者将它们转换为普通字符并二进制存储 使用iconv函数从一种编码转换为另一种编码,然后使用所需的编码
function replace_unicode_escape_sequence($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);
echo $str;
echo '<br/>';
$str = iconv('UTF8', 'ASCII//TRANSLIT', $str);
echo $str;
函数替换\u unicode\u转义\u序列($match){
返回mb_convert_编码(pack('H*',$match[1]),'UTF-8','UCS-2BE');
}
$str=preg\u replace\u回调('/\\\\u([0-9a-f]{4})/i','replace\u unicode\u escape\u sequence',$str);
echo$str;
回声“
”;
$str=iconv('UTF8','ASCII//TRANSLIT',$str);
echo$str;
这里是另一个选项:
<html><head>
<!-- don't forget to tell the browser what encoding you're using: -->
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
</head><body><?php
$string = "Ba\u015f\u00e7\u0131l";
echo json_decode('"'.str_replace('"', '\"', $string).'"');
?></body></html>
我有根据的猜测是,您从JSON字符串中获得了这样的值。如果是这种情况,则应使用以下方法正确解码整段数据:
PHP中没有本机支持对此类字符串进行解码
使用本机函数有几种技巧,但我不确定其中任何一种是安全的,并且是防注入的:
- json_解码。看
- xml解析器
- 正则表达式替换
如果任何人有其他使用本机函数转义/取消转义Utf8的选项,请发布回复。
使用Zend Framework的另一个选项是下载Zend_Utf8提案类。有关更多信息,请参阅
<?php
header('Content-Type: text/plain; charset=utf-8');
$data = '"Ba\u015f\u00e7\u0131l"';
var_dump( json_decode($data) );
?>