2012-04-26 55 views
3

我有以下的數組:PHP:json_encode和json_decode使用UTF-8

Array 
(
    [1] => Array 
     (
      [time] => 07:30 
      [event] => Celebrity Organ Recital â€「 Sophie-Véronique Cauchefer-Choplin 
     ) 
) 

(原始事件字符串是: 「名人器官演奏 - 柔-維羅尼卡Cauchefer-Choplin」 與ENT_QUOTES,我用ヶ輛)

當我使用json_encode時,事件字符串返回爲NULL,並且它在MySQL中保存爲空字符串。

如果我不使用htmlentities。我會在我的數據庫中看到這個:「Celebrity Organ Recult u2013 Sophie-Vu00e9ronique Cauchefer-Choplin」。我使用了很多方法,但仍然無法將此字符串轉換回原來的字符串。

我真的需要一些幫助,我希望你能給我一個解決方案來編碼一個UTF-8字符串,就像上面那個在json中一樣,然後保存到MySQL,然後解碼回原來的。我搜索了一段時間,但仍然找不到解決方案。

非常感謝!

+0

「我會得到這個在我的數據庫」那是因爲你是在救它錯了。 – 2012-04-26 04:52:04

+0

你爲什麼'JSON_ENCODE'將某些東西保存到DB中? – Jakub 2012-04-26 04:53:16

+0

如果從phpmyadmin導出該特定行,您在.sql文件中獲得了什麼? – 2012-04-26 04:56:09

回答

2

在我看來,你不關心消毒在SQL查詢值 http://php.net/manual/en/function.mysql-real-escape-string.php

簡單的例子: 我們有表結構:

CREATE TABLE `test` (
    `text` VARCHAR(1024) NULL DEFAULT '0' 
) 
COLLATE='utf8_unicode_ci' 
ENGINE=InnoDB 

和PHP腳本

header("Content-type:text/html;charset=utf8"); 
    $ar = array 
     (
      1 => Array 
       (
        'time' => '07:30', 
        'event' => 'Celebrity Organ Recital – Sophie-Véronique Cauchefer-Choplin' 
       ) 
     ); 

    $mysqli = new mysqli('localhost','root', '', 'test'); 

    $mysqli -> query("INSERT INTO `test` (`text`) VALUES ('" . json_encode($ar) . "')"); // we not escape characters like \, ", ' 

// now we use mysqli::real_escape_string 
    $mysqli -> query("INSERT INTO `test` (`text`) VALUES ('" . $mysqli -> real_escape_string(json_encode($ar)) . "')"); // here we escape characters 

    $mysqli_result = $mysqli -> query("SELECT * FROM `test"); 
    while($result = $mysqli_result -> fetch_assoc()){ 
     var_dump(json_decode($result["text"],true)); 
    } 

var_dump的結果是:

array 
    1 => 
    array 
     'time' => string '07:30' (length=5) 
     'event' => string 'Celebrity Organ Recital u2013 Sophie-Vu00e9ronique Cauchefer-Choplin' (length=68) 

array 
    1 => 
    array 
     'time' => string '07:30' (length=5) 
     'event' => string 'Celebrity Organ Recital – Sophie-Véronique Cauchefer-Choplin' (length=63) 

第二var_dump正常