我用输入文字制作表格。
<input type="text" id="input" value=""/>
我从网上收到了utf-8字符串(使用javascript,jquery)
var str = '\u306e\u7c21\u5358\u306a\u8aac\u660e';
str是&#39;の简単な说明&#39;。
将输入字段值设置为&#39; str&#39;
$('#input').val(str);
此输入替换所有转义字符串&#39; \&#39;并设置这样的字符串。
<input type"text" id="input" value="u306eu7c21u5358u306au8aacu660e"/>
在这一点上没问题。展示性格也不错。
但是
当我用PHP
将此字符串保存到我的数据库中时PHP将此值设置为非转义的utf8字符串&#39; u306eu7c21u5358u306au8aacu660e&#39;到数据库
下次我打电话
<input type="text" id="input" value="<?=$str?>">
和浏览器显示原始值
只是&#39; u306eu7c21u5358u306au8aacu660e&#39;
不是&#39;の简単な说明&#39;
我不知道出了什么问题。
我已经尝试了
$str = json_decode("\"".$str."\"");
html_entity_decode(...);
mb_convert_encoding(...);
但工作不正常......
如何将这个非转义的utf-8字符串转换为一般的utf-8字符串?
答案 0 :(得分:2)
你必须拥有MultiByte String支持。这里有一些额外的工作是你需要的:
<?php
$str = 'u306eu7c21u5358u306au8aacu660e';
function converter($sequence) {
return mb_convert_encoding(pack('H*', $sequence), 'UTF-8', 'UCS-2BE');
}
# array_filter is not important here at all it just "remove" empty strings
$converted = array_map('converter', array_filter(explode('u', $str)));
$converted = join('', $converted);
print $converted;
正如旁边注意到你为了找到更好的策略 拆分unicode序列。通过
u
字符串“爆炸”字符串是 有点ingenuo。
此外,我强烈建议您阅读Armin Ronacher撰写的优秀博客文章,UCS vs UTF-8 as Internal String Encoding。