3

私は次の配列を持っています:

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

(元のイベント文字列は「CelebrityOrgan Recital –Sophie-VéroniqueCauchefer-Choplin」です。ENT_QUOTESでhtmlentitiesを使用しました)

json_encodeを使用すると、イベント文字列がNULLとして返され、MySQLに空の文字列として保存されます。

htmlentitiesを使用しない場合。これは私のデータベースで取得します:「CelebrityOrgan Recitalu2013Sophie-Vu00e9roniqueCauchefer-Choplin」。多くの方法を使用しましたが、それでもこの文字列を元の文字列に戻すことはできません。

これについては本当に助けが必要です。jsonで上記のようなUTF-8文字列をエンコードし、MySQLに保存してから、元の文字列にデコードするソリューションを提供していただければ幸いです。しばらく検索しましたが、まだ解決策が見つかりません。

どうもありがとう!

4

1 に答える 1

3

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)

2番目var_dumpは正常です

于 2012-04-26T12:45:54.343 に答える