我使用输入文本制作表单。
<input type="text" id="input" value=""/>
我从网页上收到了一个utf-8编码的字符串,类似这样(使用JavaScript和jQuery)。
var str = '\u306e\u7c21\u5358\u306a\u8aac\u660e';
str是'的简单说明'。
将输入字段的值设置为'str'
$('#input').val(str);
这个输入将替换所有转义字符串 '\' 并设置字符串如下。
<input type"text" id="input" value="u306eu7c21u5358u306au8aacu660e"/>
在这一点上没有问题。显示的字符也很好。
但是。
当我使用PHP将此字符串保存到我的数据库中时,
PHP会将此值非转义的utf8字符串'u306eu7c21u5358u306au8aacu660e'存储到数据库中
下次调用时:
<input type="text" id="input" value="<?=$str?>">
并且浏览器显示原始值
只是 'u306eu7c21u5358u306au8aacu660e'
而不是 'の簡単な説明'
我不知道问题出在哪里。
我已经尝试过
$str = json_decode("\"".$str."\"");
html_entity_decode(...);
mb_convert_encoding(...);
但是没有正常工作...
我怎样将这个非转义的UTF-8字符串转换为一般的UTF-8字符串?
u306eu7c21
并不是 "UTF-8"。它只是一个字符串,包含字符 "u306eu7c21"。在 Javascript/JSON 字符串文字中,\u....
恰好是一个转义序列,但在任何情况下,“u306eu7c21” 都没有任何意义。在 UTF-8 编码(并且正确解释)的情况下,“の簡単な説明”的文本看起来像“の簡単な説明”,没有其他内容。在任何时候都不应该进行解码、编码、剥离或转换操作。如果将所有这些字符串操作步骤去除,直接发送该值会怎样? - decezevar str = '\u306e...'
,而是从服务器(AJAX JSON?)获取了\u306e...
,但已经无法正确解码或其他原因导致失败。 - deceze