私はPHPでデータを解析するためにPHPでを使用しています(POST自体はajax経由で実行されます)。私のコードは次のようになります:json_decodeがgodaddy hostingで失敗する
$data = json_decode($_POST['logdata'], true);
if(!$data) {
$ecodes = array(
JSON_ERROR_NONE => "No error has occurred",
JSON_ERROR_DEPTH => "The maximum stack depth has been exceeded",
JSON_ERROR_STATE_MISMATCH => "Invalid or malformed JSON",
JSON_ERROR_CTRL_CHAR => "Control character error, possibly incorrectly encoded",
JSON_ERROR_SYNTAX => "Syntax error",
JSON_ERROR_UTF8 => "Malformed UTF-8 characters, possibly incorrectly encoded"
);
$err = json_last_error();
$result = array("error" => 1, "error_msg" => "Invalid log data: " . $ecodes[json_last_error()]);
echo json_encode($result);
exit;
}
... //use $data array
このコードはうまくいきます。ローカルのLinuxマシンやMacで実行すると、渡されたデータは正しくデコードされ、すべて正常に動作します。しかし、godaddy共有ホスティングで同じコードが実行されると、復号化に失敗するのはです。構文エラー。問題の絞り込みに多くの時間を費やした結果、問題がJSONオブジェクトプロパティの値に<
または>
文字があるときに発生することがわかりました。
JavaScriptでアップロード部分(アヤックス)が次のようになります。
$.ajax({
url: '/emaillog.php',
type: 'POST',
dataType: 'json',
data: { logdata: JSON.stringify(this.logData[this.scenarioLogId]) },
cache: false,
error: function(jqXHR, textStatus, errorThrown) {
alert("Error occurred during upload: " + textStatus);
},
success: function(data, textStatus, jqXHR) {
var msg = data.error
? "An error occurred processing action log: " + data.error_msg
: "Action log processed successfully.";
alert(msg);
}
})
あなたが見ることができるように、POSTパラメータの値がJSON.stringify
を使用して作成され、検査に正しいとされ(クライアント側とサーバー側の両方) 。
{
"scenarioId":"1",
"scenarioName":"MOH",
"startTime":1355496349,
"log":[
{
"role":"Leader",
"task":"MOH",
"response":"start",
"time":1355496349
},
{
"role":"Head",
"task":"<span class=\"bold\">Assign Role</span>",
"response":"done",
"time":1355496351
}
]
}
(タスク役割を割り当てて)、配列の最後の要素が削除されている場合は、すべてが正常に処理されています。それは重要な場合は、ここに提出POSTパラメータの値の例です。 <
と>
>の文字をスペースで置き換えても、すべて問題ありません。
二つの質問は、このから発生する:
なJSON文字列に構文エラーが正しい行動であれば、なぜ私は他の2つの環境ではエラーが表示されないのですか?また、なぜ
JSON.stringify
が不正な文字列を生成するのですか?このようなJSON文字列の構文エラーが正しくない場合、godaddyのPHP実装または設定で何かが間違っている必要があります。
私はゴダディについて明示的に尋ねていますが、コードがエラーを生成する唯一のプロバイダである限り関連性があります。誰もがこの状況について何か光を当てることができますか?
私はJSでエンコードしようとしましたが、私のローカルPHPインストールでデコードして、大丈夫(duh)になりました。私はGoDaddyでチケットを発砲する必要があると思う。 – ualinker
@ualinkerこんにちは、ここは将来の誰か。彼らはあなたのチケットに応答しましたか? – Braiam
今後の訪問者のためのリンク:[なぜjson_decodeが機能しないのですか?](https://stackoverflow.com/questions/8904764/why-json-decode-doesnt-work-for-me) –