1

私は、SOAPを介してユーザー情報をサーバーに送信するiphoneアプリに取り組んでいます。サーバーでは、ユーザー情報をUTF-8文字列としてデータベースに保存します。

問題は、サーバーが文字列を受信すると、それらが「ü」であるはずの\U00fcなどの形式でフォーマットされたUnicodeとして送信されることです。'\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

または、すべてを1つにまとめます。

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 に答える