我有一个像“Ba \ u015f \ u00e7 \ u0131l”这样的字符串。我假设那些是一些特殊的重音字符。我如何:
1)显示带重音的字符串(即用实际字符替换代码)
2)存储这样的字符串的最佳做法是什么?
2)如果我不想允许这样的字符,我该如何用“普通字符”替换它?
答案 0 :(得分:3)
我有根据的猜测是你从JSON字符串中获取了这些值。如果是这种情况,您应该使用json_decode()正确解码整个数据:
<?php
header('Content-Type: text/plain; charset=utf-8');
$data = '"Ba\u015f\u00e7\u0131l"';
var_dump( json_decode($data) );
?>
答案 1 :(得分:1)
要显示字符,请查看How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?
您可以存储这样的字符或解码,只需确保您的存储可以处理UTF8字符集。
将iconv与translit标志一起使用。
这是一个例子......
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;
答案 2 :(得分:0)
这是另一种选择:
<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>
这是有效的,因为\ u000语法是JSON使用的语法。请注意,json_decode()
需要JSON模块,该模块现在是标准PHP安装的一部分。
答案 3 :(得分:0)
PHP中没有本机支持来解码此类字符串。
使用本机功能有几种技巧虽然我不确定其中任何一种都是安全且防注射的:
正则表达式替换
If anybody has other options for escaping/unescaping Utf8 using native function, please post a reply.
使用Zend Framework的另一个选择是下载Zend_Utf8提议类。请在Zend_Utf8 proposal for Zend Framework
查看更多信息答案 4 :(得分:-1)