それはかなり簡単です。一方には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 を含むファイルは他の命令を含むコントローラーであり、エンコーディングに大きく依存する命令は完全に機能していました。私の問題に時間を割いてくれた人に感謝します。本当に感謝しています!