0

これは私のコードです:

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

$form_num = $_GET['num'];

echo '<form name="creative" action = "'.htmlentities($_SERVER['PHP_SELF']).'?num='.$form_num.'" method="POST" >';

echo '<table>';

for ( $i=0; $i < $form_num ; $i++ ) {

    echo "<tr><td>Title: </td><td><input type='text' name='title$i' /></td></tr>";
    echo "<tr><td>Description: </td><td><input type='text' name='desc$i' /></td></tr>";


    echo "<tr><td>&nbsp;</td></tr>";
}

echo "<tr><td><input type='submit' name='submit' value='Update' /></td>
        <td><input type='reset' value='Reset' /></td></tr>";

echo '</table>';

echo '</form>';

if (isset($_REQUEST['submit'])) {

    require 'ad.php';

    $ad = new adnetwork( $hostname, $user, $password, $database );

    echo 'Status is active and set notifications are : <br /><br />';

    for ($i=0; $i< $form_num; $i++) {

        $params[] = array(
            'title' => $ad->utf8_to_unicode(html_entity_decode($_REQUEST["title$i"], ENT_COMPAT, "UTF-8")),
            'description' => $ad->utf8_to_unicode(html_entity_decode($_REQUEST["desc$i"], ENT_COMPAT, "UTF-8")),    

    }

    file_put_contents( dirname(__FILE__) . '/' . 'get_text_in_test.json', json_encode( $params ) );     
}

?>

ここで、入力番号コードを文字コードに解析する関数を使用してフォームを送信すると、次のようになります。

public function utf8_to_unicode( $str ) {

            $unicode = array();        
            $values = array();
            $lookingFor = 1;

            for ($i = 0; $i < strlen( $str ); $i++ ) {
                $thisValue = ord( $str[ $i ] );
                if ( $thisValue < ord('A') ) {
                // exclude 0-9
                    if ($thisValue >= ord('0') && $thisValue <= ord('9')) {
                    // number
                    $unicode[] = chr($thisValue);
                    }
                    else {
                        $unicode[] = ''.chr($thisValue);
                    }           
                } else {
                    if ( $thisValue < 128) 
                        $unicode[] = $str[ $i ];
                    else {
                        if ( count( $values ) == 0 ) $lookingFor = ( $thisValue < 224 ) ? 2 : 3;                
                            $values[] = $thisValue;                
                                if ( count( $values ) == $lookingFor ) {
                                    $number = ( $lookingFor == 3 ) ?
                                    ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ):
                                    ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 );

                                    $number = dechex($number);
                                    $unicode[] = (strlen($number)==3)?"\u0".$number:"\u".$number;
                                    $values = array();
                                    $lookingFor = 1;
                                } // if
                        } // if
                    }
            } // for

            return implode("",$unicode);

        }

このような文字列を渡すと❤★♫かわいい写真、これらのシンボルの文字コードが得られるはずです。これを達成するには、まず入力文字をデコードし、デコードされた文字列を関数にスローすると、次のような結果が得られます: \u2764\u2605\u266bかわいい写真ですが、私が json_encode のとき、配列にバインドされているこの文字列は次のとおりです。

$params[] = array(
                'title' => $ad->utf8_to_unicode(html_entity_decode($_REQUEST["title$i"], ENT_COMPAT, "UTF-8")),
                'description' => $ad->utf8_to_unicode(html_entity_decode($_REQUEST["desc$i"], ENT_COMPAT, "UTF-8")),    

        }

echo json_encode($params);

Androidフォンで解釈されない文字コードの前に余分なスラッシュを入れました。これらの文字コードはスラッシュでエスケープされますが、jsonは再びスラッシュを配置し、Android フォンでは読み取れません。また、私はデータベースを使用していないので、これらのjsonをjson形式のファイルに出力し、後でphp関数file_get_contentを使用してjsonファイルからすべてのデータを取得し、それを使用します。この問題で私を助けてください。

4

1 に答える 1

1

渡された文字列を二重にデコードしていると思います。

このコードの実行:

for ($i=0; $i< 2; $i++) {
    $params[] = array(
        'title' => "❤★♫Cute Pics",
        'description' => "This is some description",
    );
}

echo json_encode($params);

出力:

[{"title":"\u2764\u2605\u266bCute Pics","description":"This is some description"},{"title":"\u2764\u2605\u266bCute Pics","description":"This is some description"}]

これは有効な JSON であり、電話で問題なく解釈される必要があります (UTF8 をサポートしていない場合を除きます)。

エンコードされた文字列を受信して​​いることが確実でない限り、への呼び出しを削除する必要があると思いますhtml_entity_decode(Webサーバーがそれらをデコードするため、ほとんど確実ではありません)。また、utf8_to_unicodeを削除json_encodeします。エンコードされた JSON - 自分で行う必要はありません。

次に、単一のスラッシュでjsonを表示しますが、モバイルでは機能しません

次に、モバイルが JSON をデコードする方法に問題があり、そこで対処する必要があります。

于 2013-02-25T14:41:31.157 に答える