这很简单。一方面,我有一个 PHP 文件,另一方面,我有一个带有 javascript 脚本的 html 页面,用于获取 json 字符串并对其进行处理。
我确保我的所有文件都是 UTF-8,我的数据库也是。
第一次测试(有效):(PHP)
$array['fname'] = 'bob';
$array['lname'] = 'mozz';
$array['age'] = 20;
$array['email'] = 'test@test.com';
echo json_encode($array);
第二次测试(失败)(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){}
我试图将我的结果转换为十六进制以查看未知字符是什么:
- 当我直接从脚本打印时,我没有看到任何错误(没有特殊字符)
- 当我在控制台中打印结果时,它看起来很棒但是
- 当我将结果复制到剪贴板并将其粘贴到 utf8 文件中时,这很棒
- 当我将结果复制到 ansi 文件中时,我看到一个“?” 在它的开始
- 当我从控制台(在谷歌浏览器中)右键单击时,谷歌会在字符串的开头看到一个正方形(眼睛看不见)
在我的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 示例中插入脚本时,它可以工作,但不能来自我的第二个示例。它给我一个错误,说明我的 json 有未知令牌。
我对所有内容进行了三次检查,但我只是不知道它可能是什么。
编辑
这是 Fiddler Web 调试器的捕获,只是更奇怪:
编辑 2 我什至使用了如下修剪:
$json = json_encode($rows);
$fix = substr($json,7);
$fix = '[{"id":'.$fix;
但是当我收到它时它仍然会添加并且未知字符会添加开头。
编辑3(解决方案) 我清空文件,将其保存为不带BOM的utf8并粘贴回内容,它就完成了工作。我仍然不明白它为什么这样做。我确实了解 BOM 创建问题,但包含我的 PHP 的文件是一个包含其他指令的控制器,而那些严重基于编码的指令运行良好。非常感谢任何花时间研究我的问题的人,我真的很感激!