0

それはかなり簡単です。一方にはPHPファイルがあり、もう一方にはjson文字列を取得して何かを行うためのjavascriptスクリプトを含むhtmlページがあります。

すべてのファイルが UTF-8 であることを確認しました。データベースも同様です。

最初のテスト (動作): (PHP)

$array['fname'] = 'bob';
$array['lname'] = 'mozz';
$array['age'] = 20;
$array['email'] = 'test@test.com';
echo json_encode($array);

2 番目のテスト (失敗) (PHP)

try{
    $sql = 'SELECT * FROM blablabla';
    $results = $pdo->query($sql);

    $array = array();
    while($row = $results->fetch()){
        $array[] = array(
                'id' => $row['id'],
                'fname' => $row['fname'],
                'lname' => $row['lname'],
                'gender' => $row['gender'],
                'organization' => $row['organization'],
                'phoneLine1Label' => $row['phoneLine1Label'],
                'phoneLine1' => $row['phoneLine1'],
                'phoneLine1Ext' => $row['phoneLine1Ext'],
                'phoneLine2Label' => $row['phoneLine2Label'],
                'phoneLine2' => $row['phoneLine2'],
                'phoneLine2Ext' => $row['phoneLine2Ext'],
                'cellPhoneLabel' => $row['cellPhoneLabel'],
                'cellPhone' => $row['cellPhone'],
                'email' => $row['email']
        );
    }
    $json = json_encode($array);
    echo $json;
}catch(PDOException $e){}

結果を 16 進数に変換して、未知の文字を確認しようとしました。

  • スクリプトから直接印刷すると、何も問題はありません(特殊文字はありません)
  • 結果をコンソールに出力すると、素晴らしいように見えますが、
  • 結果をクリップボードにコピーして utf8 ファイルに貼り付けると、すばらしい
  • 結果を ansi ファイルにコピーすると、「?」が表示されます。その冒頭に ここに画像の説明を入力
  • コンソールから(Google Chromeで)右クリックすると、Googleは文字列の先頭に四角形を表示します(目に見えない)

私のjavascriptにはあります。

<script>
    $(document).ready(function(){
        var query = {
            q: 'test',
            apikey: '1234567890'
        };
        $.post('script.php',query,function(data,status){
            switch(status){
                case 'success':
                    obj = JSON && JSON.parse(data) || $.parseJSON(data);
                    console.log(obj);
                break;
            }
        });
    });
</script>

最初の PHP の例からスクリプトをプラグインすると、動作しますが、2 番目の例では動作しません。私のjsonに不明なトークンがあるというエラーが表示されます。

私はすべてをトリプルチェックしますが、それが何であるかはわかりません。

編集

これは Fiddler Web デバッガーからのキャプチャですが、さらに奇妙です。

ここに画像の説明を入力

編集 2 私も次のようなトリムを使用しました:

$json = json_encode($rows);
$fix = substr($json,7);
$fix = '[{"id":'.$fix;

しかし、それはまだ追加され、未知のキャラクターは、私がそれを受け取ったときに最初に追加されます.

編集 3 (解決策) ファイルを空にし、BOM なしで utf8 として保存し、コンテンツを貼り付けて、ジョブを実行しました。なぜそんなことをしたのか、いまだに理解できません。BOM 作成の問題は理解していますが、PHP を含むファイルは他の命令を含むコントローラーであり、エンコーディングに大きく依存する命令は完全に機能していました。私の問題に時間を割いてくれた人に感謝します。本当に感謝しています!

4

2 に答える 2