2016-10-18 7 views
0

私はmysqlデータベースからいくつかの情報を取得しようとしているし、jsonエンコードしています。私は特殊文字に問題があります。私は特殊文字を含むデータベースから情報を取得しますが、PHPのjson_encode関数を使用するとエンコードに失敗し、FALSEが返されます。特殊文字とjson_encode

私は以下の2つの方法を試しました。何もしていないようでした

CONVERT(item_stub.name USING utf8) 

:私はこれを持って私のクエリで

。それでは、私は、クエリの後にUTF8にデータを変換するには、次の追加:

while($r = $db->fetch($result)){ 
     $r[] = array_map('utf8_encode', $r); 

これは、非UTF8単一引用符を処理するように見えたが、私はまだ商標記号に問題を抱えています。

私はまた、PHPのにhtmlentitiesとはhtmlspecialchars関数を使用してみましたが、これらもhtmlspecialchars()ENT_QUOTESフラグを追加json_encode

答えて

0

てみてください似失敗。それはそうのようなあなたのためのシングルとダブルの両方の引用符の世話をします。

<?php 

     while($r = $db->fetch($result)){ 
      $r[] = array_map(
        'utf8_encode', 
        htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true))); 
      // CODE CONTINUES... (IF ANY)... 
     } 

QUICK-TEST THIS:

$r = "™™™™@†©√∫∫~ªß¥ß∂ƒåßßå∑€ƒ∑€åå€∑€∑ƒ"; 
    $s = htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true)); 
    var_dump($s); 
    //YIELDS: 
    '&trade;&trade;&trade;&trade;@&dagger;&copy;&radic;&int;&int;~&ordf;&szlig;&yen;&szlig;&part;&fnof;&aring;&szlig;&szlig;&aring;&sum;&euro;&fnof;&sum;&euro;&aring;&aring;&euro;&sum;&euro;&sum;&fnof;' (length=196) 
+0

私の問題はもう引用符ではなく、商標記号とアクセント付き文字です。 @poiz – user2874270

+0

@ user2874270その後、更新されたポストが示すように 'htmlentities'内にラップします。*テストのために追加されたリンクも参照してください... * – Poiz

0

をあなたが利用array_mapを関数の前に確認する必要があります。

  1. PHPファイルのエンコーディングを確認してください。UTF-8 File Encodingである必要があります。

  2. 使用PHPファイルは、UTF8の文字を扱うことを可能にする ヘッダ(header('Content-Type: text/html; charset=utf-8');)またはメタ タグ(<meta http-equiv="Content-type" content="text/html; charset=utf-8" />)。

  3. 情報を取得する前にSET NAMES 'utf8' sqlを実行してください。

次に、array_mapとjson_encode関数を使用します。それはあなたを助けるかもしれません。