0

PHP5.2.17サーバー+MySQL5.1.65を使用しています。

あるフィールドを含むテーブルがあり、VARCHAR utf8_general_ciこのテーブルからレコードをフェッチします。

これが私が接続を開く方法です。特別なことは何もありません。

$link = mysql_connect('localhost', 'user', 'pass');

Unicodeエスケープされた特殊文字を含むJSONオブジェクトで応答する必要があります。つまり、\u00e1表記法です。

 $result = mysql_query(sprintf("select * from data t where t.domain='%s'", escape($domain));


  while($row = mysql_fetch_array($result)) {
    $r[] = array(
      "tagid" => $row['DATAID'],
      "name" => $row['NAME']
    );
   )

$encoded = json_encode($r);
header('Content-type: application/json');
exit($encoded);

null私の問題は、JSON応答のように特殊文字(áé..)を含むフィールドが返されることです。

しばらくグーグルで検索した後、PHP 5.2にはjson_encodeパラメーターがないことがわかったので、名前フィールドを手動でユニコードエスケープする必要があります。しかし、どうすればこれを行うことができますか?

4

5 に答える 5

3

json_encode()UTF-8データを完全にうまく処理できるはずです.JSONはUTF-8のみであるため、PHPがUTF-8対応としてこの特定の機能を持たないのは奇妙です.

$array = array('key' => 'せ');

var_dump(json_encode($array)); // string(16) "{"key":"\u305b"}"

列の照合は可能ですが、文字がUTF-8 としてエンコードさVARCHAR utf8_general_ciれているわけではありません。テーブルは次のように作成する必要があります。

CREATE TABLE ... CHARACTER SET utf8

そして、おそらくこれを最初のクエリとして実行する必要があります。

SET NAMES utf8
于 2012-10-23T13:13:47.367 に答える
1

実際には、このエスケープを行う必要はありません。可能性が高いのは、入力データが実際には有効な UTF-8 ではないということです。

テーブルの照合順序を変更しても、これは修正されない場合があります。それが有効であると絶対に確信していますか?

また、mysql_ 関数の使用をやめ、PDO または mysqli を使用してください。mysql_ 関数は、かなり前に廃止されました。

于 2012-10-23T13:13:57.903 に答える
0

また、データを base64_encode(ing) すると、json_encode の信頼性が向上することもわかります。あなたの例では:「タグ

"tagid" => base64_encode($row['DATAID'])
...

次に、すべてを json_encode します。もちろん、反対側で base64_decode する必要があります。

于 2014-12-22T19:36:23.187 に答える