[英]Array from PHP to Javascript is null
我已經在個人項目上工作了幾天,一切工作都很好,但是自從2個小時前再次開始以來,我遇到了以下問題:
<html>
<head>
<title>Page Title</title>
</head>
<body>
<?php
$Testarray = array_map('str_getcsv', $content=file('Shows.csv'), array_fill(0,count($content), ";"));
foreach($Testarray as $array)
{
foreach($array as $item)
{
print($item);
print '<br/>';
}
}
?>
<script type="text/javascript">
var array = <?php echo json_encode($Testarray); ?>;
</script>
</body>
</html>
我最不敢問,但是Javascript中的'var array'為null。 $ Testarray已正確填充,它會打印正確的值。 我試圖用一個簡單的String來做同樣的事情,並且可以正常工作。
我也嘗試過var array = new Array(); 在填充之前。 沒有效果。
在Trincot的回復后進行編輯:
var array = JSON.parse('<?php echo json_encode($Testarray); ?>');
在Chrome的“來源”中給出以下結果:
var array = JSON.parse(' ');
因此它似乎仍然不返回任何東西。
編輯2:var_dump($ testarray)(Chrome中的源代碼):
最終編輯:問題的原因是我從中導出到CSV文件的xlsx文件中的值。 xlsx的值帶有ô
字符,在CSV文件中已替換為
。 這導致PHP中嵌套了一個空數組,並使一切蓬勃發展。
使用另一個問題的Eric答案,將xlsx文件另存為xls,然后將xls另存為CSV可以解決問題。
代碼很好。 JSON可以像這樣注入到Javascript中,只是輸出一個空白是不正常的。
您添加到問題中的var_dump
輸出確認PHP中確實存在一個數組,該數組沒有顯示明顯的原因。 我建議通過按元素輸出JSON元素來調試它:
var array = [
<?php
foreach($Testarray as $array) {
$output = json_encode($array);
echo " $output,\n";
}
?>
];
您報告說,第一個值已正確輸出,但是字符ô
的值出現了問題。 但是,這不是問題的根源。 在一個好的配置中,下面的代碼:
echo json_encode("ô");
將返回: \\ u00f4
這是正確的unicode號和有效的JSON ,不會導致您遇到的影響。 請注意,最后一個鏈接也指出:
JSON文本的字符編碼始終為Unicode。 UTF-8是唯一在線路上有意義的編碼,但也允許使用UTF-16和UTF-32。
您真正面對的問題與字符編碼有關 。
為了解決這個問題,您應該先確保數據采用UTF-8編碼,然后再將其傳遞給json_encode
。 如果從CSV文件中獲取文件,請確保將該文件另存為UTF-8。
上面的代碼可能會解決您的問題,但是遵循W3C 聲明HTML中的字符編碼的說明(包括(也包括)以下內容)也將是很好的:
聲明HTML中的UTF-8編碼,例如通過在head
添加<meta charset="UTF-8">
。 還可以使用<!DOCTYPE html>
啟動文件;
確保您的PHP文件以UTF-8字符編碼保存。 大多數編輯器都在“ 另存為”菜單下或某些“首選項”菜單中為此提供了一個選項。 如果編輯器提供了選擇,請包括字節順序標記 。 例如, notepad ++在“ 編碼”菜單中提供了這種可能性。
如果仍然遇到問題,請驗證有關字符編碼和HTTP輸出編碼的PHP配置設置。 如果您在此處指定了非默認的非UTF-8值,則可能是造成問題的原因。
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8
嘗試做JSON.parse("<?php echo json_encode($Testarray); ?>")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.