我正在开发一个iphone应用程序,我通过SOAP将用户信息发送到我的服务器,在那里我将它们作为UTF-8字符串存储在我的数据库中。
问题是,当服务器收到字符串时,它们将以格式化的Unicode格式发送,例如: \ U00fc应该是'ü'。 包含'\ U00fc'的字符串正确存储在数据库中。但是当我读到数据库时,我只得到了'U00fc',它就消失了......
但是为了更好的读取选项,我实际上想将'\ U00fc'转换为'ü'将它存储到数据库中,然后在读取数据库时我会将其转换回iPhone。
我在PHP中找不到任何执行此操作的函数...我很确定这样的东西必须存在于某个地方,而不是我必须重新实现整个unicode表...
如果你知道任何建议我会很高兴你能帮助我。
答案 0 :(得分: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