簡體   English   中英

從PHP到Javascript的數組為空

[英]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中的源代碼):

var_dump testarray

最終編輯:問題的原因是我從中導出到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值,則可能是造成問題的原因。

影響編碼的 PHP.ini 設置

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM