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

将Unicode Javascript字符串转换为PHP utf8字符串,javascript,php,string,utf-8,Javascript,Php,String,Utf 8,我用输入文本生成表单 <input type="text" id="input" value=""/> str是'の簡単な説明'. 将输入字段值设置为“str” $('#input').val(str); 此输入替换所有转义字符串“\”并按如下方式设置字符串 <input type"text" id="input" value="u306eu7c21u5358u306au8aacu660e"/> 但工作不正常 如何将此非转义utf-8字符串转换为常规utf-8字符串

我用输入文本生成表单

<input type="text" id="input" value=""/>
str是'の簡単な説明'.

将输入字段值设置为“str”

$('#input').val(str);
此输入替换所有转义字符串“\”并按如下方式设置字符串

<input type"text" id="input" value="u306eu7c21u5358u306au8aacu660e"/>
但工作不正常


如何将此非转义utf-8字符串转换为常规utf-8字符串?

您必须具有多字节字符串支持。需要做一些额外的工作:

<?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;

u306eu7c21
不是“UTF-8”。这是一个字符为“u306eu7c21”的字符串<代码>\u…
恰好是Javascript/JSON字符串文本中的转义序列,但“u306eu7c21”在任何上下文中都没有任何意义。“案文”の簡単な説明" 用UTF-8编码(并正确解释)看起来像“の簡単な説明“,没有其他内容。任何时候都不应进行解码、编码、剥离或转换。如果您执行所有这些字符串操作步骤,只按原样发送值会怎么样?@deceze主要问题是$(“#input”).val(“utf-8编码字符串”)方法强制将“\u”更改为“u”,php接受“uxxxuxxxx…”字符串。服务器响应是正确的。utf-8编码字符串的响应像“\uxxx\uxxx”我不知道,这似乎很奇怪。你能给出重现此问题的最小可能示例吗?我猜你实际上没有
var str='\u306e…”
,你得到了
\u306e…
来自某个服务器(AJAX JSON?),并且已经无法正确解码它或其他东西。@deceze是的,有些奇怪。很难发布示例。代码非常庞大。无论如何,我已经通过使用regex替换u[0-9a-fA-F]->到\u[0-9a-fA-F]解决了这个问题。在存储到数据库之前。请注意,首先应避免向服务器发送“u306e”之类的垃圾。如果无法修复发送端,则解决方案会起作用,但应避免将此作为最后手段。谢谢。但为什么要使用javascript$('#…).val(…)将utf8字符串转换为非转义字符串?@deceze是的!实际上最好在数据库中设置正确的编码并按原样存储值。
<input type="text" id="input" value="<?=$str?>">
$str = json_decode("\"".$str."\"");
html_entity_decode(...);
mb_convert_encoding(...);
<?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;