2016-11-02 14 views
1

私は特別な問題があります。 Unity3D側で翻訳ファイルとして使用するjsonファイルを生成しようとしています。 sublimeTextでファイルを開くとき、私はちょうどデンマークの「æøなどの特殊文字の前にいくつかの奇妙な挿入を参照してくださいそれが実際に正しい仕事をしていませんPHPからjsonファイルを生成するトラブルの特殊文字

$lang = $_GET["lang"]; 

header('Content-disposition: attachment; filename=da.json'); 
header('Content-type: text/plain'); 

$jsonString = "{\n"; 

$result = mysqli_query($con,"SELECT * FROM ReloadedSnippets ORDER BY id"); 
while ($row = mysqli_fetch_assoc($result)){ 

    $snippetId = $row['id']; 

    $result1 = mysqli_query($con,"SELECT * FROM ReloadedTranslations WHERE fk_snipId=$snippetId AND lang='$lang'"); 
    $row1 = mysqli_fetch_assoc($result1); 

    $string1 = $row1["translation"]; 
    $string1 = mysqli_real_escape_string($con,$string1); 
    $jsonString .= " "; 
    $jsonString .= '"'.$row['snippet'].'": "'.$string1.'",'; 
    $jsonString .= "\n"; 

} 

$jsonString .= '}'; 

$jsonString = mb_convert_encoding($jsonString,'utf-8','iso-8859-1'); 

echo $jsonString; 

を、しかし...:

私はこのようにそれをやっていますå "。

enter image description here

誰もこれが何であるかを説明し、私は心配する必要がある場合はできますか?そして、何よりも最善のこと...これをどうやって回避するのですか?

すべてのヘルプは変更する

+0

なぜあなたはビルトインでは使用しないような方法' json_encode ?この方法でJSONをエスケープします。 – Benyi

答えて

0

てみてください:-)評価されて:あなたは確かで手JSONを生成することができますが、私が代わりに使用することをお勧め

$jsonString = mb_convert_encoding($jsonString,'UTF-8',mb_detect_encoding($jsonString)); 

とヘッダ

header('Content-type: text/plain; charset=utf-8'); 
2

を追加組み込みのjson_encode php関数(docsを参照)。この関数は、引用符のようにエスケープする必要がある最終的な文字を処理します。

代わりに直接JSON文字列を生成するのでは、オブジェクトの表現を生成して、文字列に変換します。代わりに自分でJSONを生成する `)(

$jsonData = []; 
$result = mysqli_query($con, "SELECT * FROM ReloadedSnippets ORDER BY id"); 
while ($row = mysqli_fetch_assoc($result)) { 
    $snippetId = $row['id']; 

    $result1 = mysqli_query($con,"SELECT * FROM ReloadedTranslations WHERE fk_snipId=$snippetId AND lang='$lang'"); 
    $row1 = mysqli_fetch_assoc($result1); 

    $string1 = $row1["translation"]; 
    $string1 = mysqli_real_escape_string($con,$string1); 
    $jsonData[$row['snippet']] = $string1; 
} 

$jsonString = json_encode($jsonData); 
echo $jsonString; 
+0

さて、これを試してみましたが、文字列に特殊文字(æøå)があるときはいつでも "null"として出てきます。私はこれが最善の解決策であることに同意しますが、それを動作させる方法がわかりません: -/ – Mansa

+0

@Mansa入力テキストの中にいくつかのエンコード不可能な文字があるか、それらの文字が既にdbに書き込まれているようです。 mysqli_set_charset($ link、 "utf8") 'を使ってutf8 mysql接続を強制しようとするかもしれません。 – aghidini

+0

OK、今すぐすべてをやった...そのすべてが最初から最後まで "utf8"でも同じですか? – Mansa

関連する問題