2016-07-09 6 views
1

Ich versuche, Daten von meinem Server zu bekommen, die auf Griechisch geschrieben sind. Sie sind gut gespeichert, aber wenn ich sie lese, habe ich ein Problem wie gezeigt.Griechen Buchstaben und JSON Antwort

[{"id":"22","game":"??? 3 - 0 ?????","date":"27th August, 2016"}] 

Ich füge die

JSON_UNESCAPED_UNICODE 

in meiner json_encode() Funktion aber ich weiß, das zu bekommen.

Notice: Use of undefined constant JSON_UNESCAPED_UNICODE - assumed 'JSON_UNESCAPED_UNICODE' in /var/www/vhosts/theo-android.co.uk/httpdocs/ael/android/last_game_json.php on line 25 

Warning: json_encode() expects parameter 2 to be long, string given in /var/www/vhosts/theo-android.co.uk/httpdocs/ael/android/last_game_json.php on line 25 

Dies ist mein PHP-Code, der das JSON liest.

<?php 
include("../init.php"); 

$string=""; 
$newString=""; 
$get_posts = "select * from last_game"; 

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$run_posts = mysqli_query($con, $get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)) { 
    $row_array['id'] = $posts_row['id']; 
    $row_array['game'] = $posts_row['game']; 
    $row_array['date'] = $posts_row['date']; 

    array_push($posts_array,$row_array);    
} 

$string = json_encode($posts_array, JSON_UNESCAPED_UNICODE);  
echo $string; 

Irgendwelche Ideen, wie man es repariert?

Danke.

Theo.

EDIT

tat ich das, aber ich erhalte eine Fehlermeldung.

<?php 
include("init.php"); 

$get_posts = "select * from last_game"; 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
$run_posts = mysqli_query($con,$get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)){ 


       $row_array['id'] = $posts_row['id']; 
       $row_array['game'] =$posts_row['game']; 
       $row_array['date'] = $posts_row['date']; 


       array_push($posts_array,$row_array); 

} 
    $str = '\u0391\u0395\u039b 3 - 0 \u039e\u03b1\u03bd\u03b8\u03b7'; 
    $str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) { 
    (return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); 
    (}, $str); 
    //$string = json_encode(utf8_encode($posts_array)); 
    //$response = utf8_encode($string,true); 
    //echo $response; 
    print($str); 

?> 

in dieser Zeile:

return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); 
+0

Ist Ihre gesamte Kette UTF-8 sauber? Sie können Codierungsprobleme bekommen, wenn es so etwas wie Latin1 oder Windows-1252 gibt. Verbindung, Datenbank, Spaltentypen müssen übereinstimmen. – tadman

+0

Ja, sie sind sauber. Ich für die Felder Datum und Spiel habe ich uf8_general_ci. – Theo

+0

Ich habe PHP Version 7 – Theo

Antwort

2

Bevor Sie Ihre Datenbank zugreifen, vorzugsweise direkt, nachdem die Verbindung eingerichtet ist, dies zu tun:

mysqli_query($con, "SET CHARACTER SET utf8"); 
mysqli_query($con, "SET NAMES 'utf8'"); 
mysqli_query($con, "SET SESSION collation_connection = 'utf8_general_ci'"); 

außerdem sicher, dass Ihre Tabelle erstellt wurde UTF-8-Codierung für Textfelder verwenden. Um dies zu überprüfen, benutzen Sie:

SHOW CREATE TABLE last_game; 

Wenn Sie latin1 Sie werden sehen, dies zu ändern, um utf8 möchten, und utf8_general_ci oder utf8_unicode_ci.

Stellen Sie außerdem sicher, dass die Daten in UTF-8 sind, wenn sie eingegeben und gespeichert werden.

Bearbeiten: Es sieht so aus, als ob Sie aus dem JSON-Parsing Unicode erhalten. Wahrscheinlich, weil Sie eine ältere Version von PHP haben. Sie können dies es konvertieren tun:

php > $str = '\u0391\u0395\u039b 3 - 0 \u039e\u03b1\u03bd\u03b8\u03b7'; 
php > $str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) { 
php ( return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); 
php (}, $str); 
php > 
php > print($str); 
ΑΕΛ 3 - 0 Ξανθη 
php > 

here Siehe für weitere Beispiele dafür, wie JSON_UNESCAPED_UNICODE in älteren PHP-Versionen zu emulieren.

Edit: ändern bearbeitet Code dazu:

<?php 
include("../init.php"); 

// Probably just put this in init.php. 
mysqli_query($con, "SET CHARACTER SET utf8"); 
mysqli_query($con, "SET NAMES 'utf8'"); 
mysqli_query($con, "SET SESSION collation_connection = 'utf8_general_ci'"); 

$string=""; 
$newString=""; 
$get_posts = "select * from last_game"; 

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$run_posts = mysqli_query($con, $get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)) { 
    $row_array['id'] = $posts_row['id']; 
    $row_array['game'] = $posts_row['game']; 
    $row_array['date'] = $posts_row['date']; 

    array_push($posts_array, $row_array);    
} 

$string = json_encode($posts_array); 
$string = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) { 
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); 
}, $string); 

echo $string; 
+0

Sorry wo und wie soll ich SHOW CREATE TABLE last_game; – Theo

+0

Ich benutze einen Online-Server – Theo

+0

CREATE TABLE IF NOT EXISTS 'last_game' ( ' id' int (10) NOT NULL AUTO_INCREMENT, 'date' Text NOT NULL, ' game' Text NOT NULL, PRIMARY KEY ('id ') ) ENGINE = InnoDB DEFAULT CHARSET = utf8_general_ci AUTO_INCREMENT = 30; – Theo