繁体   English   中英

PHP \uXXXX编码字符串转换为utf-8

[英]PHP \uXXXX encoded string convert to utf-8

我有这样的字符串

\u041d\u0418\u041a\u041e\u041b\u0410\u0415\u0412

如何将其转换为 utf-8 编码? 给定字符串的编码是什么? 感谢您的参与!

简单的方法是将您的字符串包装成双引号,让json_decode转换\转义json_decode (这恰好是Javascript字符串语法。)

 $str = json_decode("\"$str\"");

似乎是俄语字母: НИКОЛАЕВ (当json_decode返回它时,它已经是UTF-8了。)

要在PHP中解析该字符串,您可以使用json_decode因为JSON支持该unicode文字格式。

作为序言,您通常不应在 JSON 文档之外遇到\uXXXX unicode 转义序列,在这种情况下,您应该使用json_decode()解码这些文档,而不是尝试手动从中间挑选字符串。

如果你想生成 JSON没有unicode 转义序列的文档,那么你应该在json_encode()中使用JSON_UNESCAPED_UNICODE标志。 然而,逃逸是默认的,因为它们最有可能通过各种中间系统安全传输。 我强烈建议启用转义,除非你有充分的理由不这样做。

最后,如果您只是在寻找使 unicode 文本以某种方式“安全”的东西,请改为通读以下 SO masterpost: UTF-8 一直

如果在三段“不要这样做”之后,您仍然想这样做,那么这里有几个函数用于在任意文本中应用/删除\uXXXX转义:

<?php

function utf8_escape($input) {
    $output = '';
    for( $i=0,$l=mb_strlen($input); $i<$l; ++$i ) {
        $cur = mb_substr($input, $i, 1);
        if( strlen($cur) === 1 ) {
            $output .= $cur;
        } else {
            $output .= sprintf('\\u%04x', mb_ord($cur));
        }
    }
    return $output;
}

function utf8_unescape($input) {
    return preg_replace_callback(
        '/\\\\u([0-9a-fA-F]{4})/',
        function($a) {
            return mb_chr(hexdec($a[1]));
        },
        $input
    );
}

$u_input = 'hello world, 私のホバークラフトはうなぎで満たされています';
$e_input = 'hello world, \u79c1\u306e\u30db\u30d0\u30fc\u30af\u30e9\u30d5\u30c8\u306f\u3046\u306a\u304e\u3067\u6e80\u305f\u3055\u308c\u3066\u3044\u307e\u3059';

var_dump(
    utf8_escape($u_input),
    utf8_unescape($e_input)
);

Output:

string(145) "hello world, \u79c1\u306e\u30db\u30d0\u30fc\u30af\u30e9\u30d5\u30c8\u306f\u3046\u306a\u304e\u3067\u6e80\u305f\u3055\u308c\u3066\u3044\u307e\u3059"
string(79) "hello world, 私のホバークラフトはうなぎで満たされています"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM