将Unicode Javascript字符串转换为PHP utf8字符串

时间:2016-02-02 12:13:56

标签: javascript php string utf-8

我用输入文字制作表格。

<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"/>

在这一点上没问题。展示性格也不错。

enter image description here

但是

当我用PHP

将此字符串保存到我的数据库中时

PHP将此值设置为非转义的utf8字符串&#39; u306eu7c21u5358u306au8aacu660e&#39;到数据库

下次我打电话

<input type="text" id="input" value="<?=$str?>">

和浏览器显示原始值

只是&#39; u306eu7c21u5358u306au8aacu660e&#39;

不是&#39;の简単な说明&#39;

enter image description here

我不知道出了什么问题。

我已经尝试了

$str = json_decode("\"".$str."\"");
html_entity_decode(...);
mb_convert_encoding(...);

但工作不正常......

如何将这个非转义的utf-8字符串转换为一般的utf-8字符串?

1 个答案:

答案 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