2

サーバーにデータを保存しようとしていますが、エンコードの問題が見つかりました。

これが私のオブジェクトをPHPに送信する方法です(これは正常に機能しますが、contentTypeが実際に何もしていないと思います):

$.post(
  'myfile.php',
   {
       contentType: "application/x-www-form-urlencoded;charset=utf-8",
       data : myData
   },
   function (data, textStatus, jqXHR){
      //some code here
   }
);

そしてPHP(myfile.php)では:

<?php
   header('Content-Type: text/html; charset=utf-8');

   $file = 'data/theData.txt'; //the file to edit
   $current = file_get_contents($file); // Open the file to get existing content
   $a2 = json_decode( $current, true );

   $data = $_POST['data']; //the data from the webpage

   $res = array_merge_recursive( $data, $a2 );

   $resJson = json_encode( $res );

   // Write the contents back to the file
   file_put_contents($file, $resJson);
?>

ご覧のとおり、ファイルの元の内容を取得してjsonをデコードしています。次に、結果をWebページから送信されたデータとマージしてから、jsonで再エンコードし、コンテンツを元に戻します。

これはすべて期待どおりに機能します。ただし、私のJqueryのある時点で、送信されるデータには「/ö鳯ę」のようなさまざまな記号が含まれています。

ファイルが保存されると、各「/」の前にエスケープ文字「\」が付きます。同様に、たとえば「é」は「\u00e9」です。

これをオーバーライドするにはどうすればよいですか?PHPで適切に変換する必要がありますか、それとも$ .get('data / theData.txt'を取得した後、JQueryで正しい形式に変換する方法ですか?

この問題に光を当てることは大歓迎です!貧弱な変数名を許してください。

4

2 に答える 2

1

@ chalet16によって提供されたリンクは役に立ちましたが、JSON_UNESCAPED_UNICODEが機能しない場合は、これでうまくいきます。

$myString = $json_encode($myObject); 
//After initially encoding to json there are escapes on all '/' and characters like ö é ł Ż ę

//First unescape slashes:
$myString = str_replace("\/","/",$myString);

//Then escape double quotes
$myString = str_replace('"','\\"',$myString);

//And Finally:
$myNewString = json_decode('"'.$myString.'"');
于 2012-04-28T23:13:29.033 に答える
0

PHP> = 5.4.0を使用している場合は、json_encode関数でJSON_UNESCAPED_UNICODEオプションを使用できます。詳細については、php.net:json_encodeをご覧ください。

PHP <5.4.0の場合、同じページのユーザー投稿メモでこれを行う方法についていくつかのコメントがありますが、正しく機能するかどうかは不明です。

于 2012-04-28T17:48:24.953 に答える