おそらく、バイナリ UTF-8 文字ではなく、エンコードされた Unicode 文字を decode_json に渡しています。問題と 2 つの簡単な潜在的な修正については、こちらを参照してください。
他にも、data_obj でエンティティ名をエスケープしていないことが挙げられます (関連する値を考えると、エンティティ名自体がエンティティ名であると想定しています)。代わりに、それらの変数の内容を挿入しようとしています。それらを識別子自体にしたいと思っていると思います:
data_obj = { 'id' : n_id, 'links_json' : json_string }
これを使用してサーバーに既に保存されているデータに単にアクセスする場合を除き、より適切に RESTful にするために、代わりに POST (または PUT) を使用することを検討する必要があります。
また、GET は URL に追加して実行されるため、次の点に注意する必要があります。
データオブジェクト、文字列
サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GET リクエストの URL に追加されます。この自動処理を防ぐには、processData オプションを参照してください。
processData、ブール値
デフォルト: 真
デフォルトでは、オブジェクト (技術的には文字列以外のもの) としてデータ オプションに渡されたデータは処理され、デフォルトのコンテンツ タイプ「application/x-www-form-urlencoded」に適合するクエリ文字列に変換されます。 . DOMDocument またはその他の未処理のデータを送信する場合は、このオプションを false に設定します。
データには URL が追加されるため、JavaScript が適切にバイナリ エンコードされた UTF-8 を送信しようとしても、エンコードされた Unicode に変換される可能性があります。
さらに、送信datatype
するデータとは無関係であり、受信する予定のデータを指します。あなたはこれを理解していると思いますが、私は確信したかったのです。
したがって、自分で文字列化するのdata_obj
ではなく、自分で文字列化する.ajax
ことをお勧めします。
受信した (サーバー側) データをそのまま (json デコードを実行せずに) 単純にエコーして、サーバー側で受信しているものを確認し、それが期待したものと一致するかどうかを確認しましたか? 問題を再現するサンプル データセットがなければ、問題が何であるかを判断するのは困難です。ただし、これは Perl の json_decode と関連するエンコーディングの問題 (ここの最初の行) に関連していると思います。