2012-04-28 15 views
2

サーバーにデータを保存しようとしていますが、エンコードの問題があります。PHPでutf-8でエンコードされたjsonを.txtファイルに保存するには

私は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をデコードしています。私はその後、jsonで再エンコードする前にWebページから送信されたデータと結果をマージし、内容を元に戻します。

これはすべて正常に動作します。しかし、私のJqueryの一点では、 "/ö鳯ę"のような多種多様なシンボルが含まれています。

ファイルが保存されると、それぞれ '/'の前にエスケープ文字 '\'同様に 'é'は '\ u00e9'です

これはどのように無効にしますか?私はPHPで正しく変換しようとするか、$ .get( 'data/theData.txt')を持っていれば正しい形式に変換する方法でしょうか?

大歓迎です!貧しい変数名を許しなさい。

+0

(http://stackoverflow.com/questions/4409039/convert-a-json-into-a-utf-8-string)[UTF-8文字列にJSONを変換]の可能な重複 –

+0

@ IgnacioVazquez-Abrams:私はそれがダブだとは思わない。 –

+0

$ _POSTの値にbase64_encode()を使用し、それを私たちに渡します。これは私たちのためにバイナリの安全な文字列を保存するので、utf8かどうかをあなたに伝えることができます。 – goat

答えて

0

@ 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.'"'); 
0

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

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

+0

ありがとうございました@ chalet16それは大いに役立ちました。残念なことにJSON_UNESCAPED_UNICODEオプションは私のためには機能しませんでしたが、他のコメントはそれを修正しました。 – Patrick

関連する問題