1

我正在开发一个 iphone 应用程序,我通过 SOAP 将用户信息发送到我的服务器,在那里我将它们作为 UTF-8 字符串存储在我的数据库中。

问题是,当服务器接收到字符串时,它们会以Unicode 格式发送,格式为例如\U00fc,它应该是'ü'。包含 '\U00fc' 的字符串已正确存储在数据库中。但是当我阅读数据库时,我只得到'U00fc' \ 消失了......

但也为了更好的读取选项,我实际上想将 '\U00fc' 转换为 'ü' 将其存储到数据库中,然后在读取数据库时我会将其转换回 iPhone。

我只是在 PHP 中找不到任何这样做的函数......我很确定这样的东西一定已经存在于某个地方,而不是我必须重新实现整个 unicode 表......

如果你知道任何建议,如果你能帮助我,我会很高兴。

4

1 回答 1

2

如果您的输入坚持使用大写\U,您可以使用以下方法修复它:

<?php
header( "Content-Type: text/plain; charset=UTF-8");

function fixEscapeSequence( $str ) {
    return preg_replace( '/\\\U([a-fA-F0-9]{4})/', '\u$1', $str );
}

echo json_decode(fixEscapeSequence('"M\U00FCller"'));
//Müller

或者全部包裹在一个中:

function uToUTF8( $str ) {
    $needle = array( "\\", '"');
    $repl = array( "\\\\", '\\"' );
    $str = str_replace( $needle, $repl, $str );
    return json_decode( preg_replace( '/\\\\\\\U([a-f0-9]{4})/i', '\u$1', "\"{$str}\"" ) );
}



echo uToUTF8( 'M\u00FCller');
//Müller
echo uToUTF8( 'M\U00FCller');
//Müller
于 2012-12-02T13:44:58.740 回答