2016-09-27 17 views
1

json_encodeを使用して特殊文字でデータを保存しようとしています。json_encode PHP 5.3.3のUTF-8

コードサンプル:

$a = array("Name" => "SáENZ PEñA"); 
echo "Normal : ", json_encode($a), "<br>"; 
echo "Unicode : ", json_encode($a, JSON_UNESCAPED_UNICODE), "<br>"; 

JSON_UNESCAPED_UNICODEは、PHP 5.6

Normal : {"Name":"S\u00e1ENZ PE\u00f1A"} 
Unicode : {"Name":"SáENZ PEñA"} 

の問題を解決するが、unfortunelly私は、PHP 5.3を持っている:

Normal : {"Name":"S\u00e1ENZ PE\u00f1A"} 
Unicode : 
Warning: json_encode() expects parameter 2 to be long, string given in /var/www/.../TEST.php on line 4 

PHPで動作する任意のソリューションを5.3?あなたがJSON_UNESCAPED_UNICODEを使用できない場合は、それがエンコードされています後

+0

なぜエンコードされたデータを再度エンコードするのですか?パスの配列 –

+0

fwriteでjsonファイルにデータを保存するには – Clementine

答えて

1

、あなたはおそらくJSONを自分でエスケープ解除できます

  • \に対応(エスケープバックスラッシュそのもの)
  • * JSON_HEX_との互換性フラグ

    function raw_json_encode($input, $flags = 0) { $fails = implode('|', array_filter(array( '\\\\', $flags & JSON_HEX_TAG ? 'u003[CE]' : '', $flags & JSON_HEX_AMP ? 'u0026' : '', $flags & JSON_HEX_APOS ? 'u0027' : '', $flags & JSON_HEX_QUOT ? 'u0022' : '', ))); $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/"; $callback = function ($m) { return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8'); }; return preg_replace_callback($pattern, $callback, json_encode($input, $flags)); }

例十分な

<?php 

function raw_json_encode($input, $flags = 0) { 
    $fails = implode('|', array_filter(array(
     '\\\\', 
     $flags & JSON_HEX_TAG ? 'u003[CE]' : '', 
     $flags & JSON_HEX_AMP ? 'u0026' : '', 
     $flags & JSON_HEX_APOS ? 'u0027' : '', 
     $flags & JSON_HEX_QUOT ? 'u0022' : '', 
    ))); 
    $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/"; 
    $callback = function ($m) { 
     return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8'); 
    }; 
    return preg_replace_callback($pattern, $callback, json_encode($input, $flags)); 
} 

$json = array(
    'Sample' => array(
     'specialchars' => '<x>& \' "</x>', 
     'backslashes' => '\\u0020', 
     'context' => 'جمهوری اسلامی ایران', 
    ) 
); 

echo raw_json_encode($json, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); 

/* 
{"Sample":{"specialchars":"\u003Cx\u003E\u0026 \u0027 \u0022\u003C\/x\u003E","backslashes":"\\u0020","context":"جمهوری اسلامی ایران"}} 
*/