2017-02-12 13 views
0

で特殊文字を持つオブジェクトを返すすべて、私はMYSQLクエリを実行し、結果を配列に配置するphpファイルを持っています。テーブルにはいくつかのフィールドがあり、1つはvarchar文字列の一部として ' - 'と '%'という文字があります。これをJSON配列に渡すと、単純に消滅します。 4% - ここでは、コードセクションが...PHPはJSON配列

PHPファイル

// fetch merit guidelines 
$meritGuideline = array(); 
$sql = "SELECT smg.id, year, ea.rating, ratioUpper, ratioLower, guideline, guidelineNum FROM spot_merit_guide smg JOIN epm_annual ea ON ea.id = smg.rating WHERE year = '$spotYear'"; 
$query = mysqli_query($con, $sql); 
while ($row = mysqli_fetch_assoc($query)) { 
    $meritGuideline[] = $row; 
} 
mysqli_free_result($query); 

あるそれから私はこの

echo json_encode(array('meritGuideline' => $meritGuideline)); 

でそれを返すmysqlのテーブルのフィールドのガイドラインは、文字列の0が含まれています。

+0

よくjsonエンコーディングでは、 '-'や'% 'は特別なものとして扱われません。返されたjsonを使用しようとすると何が死ぬのでしょうか? –

+0

私が知っていることは、その1つのフィールドを含めると全体が死ぬことです。もし私が - と%すべてが大丈夫に行く削除します。戻り値なし。 –

答えて

1

まず、UTF-8にデータをエンコードしてみてください:

// fetch merit guidelines 
$meritGuideline = array(); 
$sql = "SELECT smg.id, year, ea.rating, ratioUpper, ratioLower, guideline, guidelineNum FROM spot_merit_guide smg JOIN epm_annual ea ON ea.id = smg.rating WHERE year = '$spotYear'"; 
$query = mysqli_query($con, $sql); 
while ($row = mysqli_fetch_assoc($query)) { 
    $meritGuideline[] = utf8_encode($row); // ENCODE TO UTF-8 
} 
mysqli_free_result($query); 

そして、デバッグの目的のためにこれを実行します。

echo json_encode(array('meritGuideline' => $meritGuideline)); 
echo 'Error: ' . json_last_error_msg(); 
  1. 上記の最初の行は、出力あなたのJSONを行う場合には、この問題はおそらく、隠されたUTF-8のみの特殊/不可視のスペース文字でした。これは、JSONエンコーディングやブラウザでのJavascriptコードの解析にいたずらされることがよくあります。ここでは、これらの「特別な」空白文字のいくつかの例は以下のとおりです。

    ノーブレークスペース:http://www.fileformat.info/info/unicode/char/00a0/index.htm

    ゼロ幅スペース:http://www.fileformat.info/info/unicode/char/200b/index.htm

  2. 最初の行は、まだ何も出力しない場合には、 2行目で、PHPのJSONエンコーダー内で起こっている正確なエラーを見ることができます。