PHP 5.3.3中的json_encode UTF-8

克莱门汀

尝试使用json_encode保存带有特殊字符的数据。

代码示例:

$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"}

但不幸的是我有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兼容的解决方案?

巴文·索兰基(Bhavin Solanki)

如果您不能使用JSON_UNESCAPED_UNICODE,则可以在对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":"جمهوری اسلامی ایران"}}
*/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

utf-8和json_encode中的PHP编码

来自分类Dev

PHP警告:json_encode()[<a href='function.json-encode'> function.json-encode </a>]:参数in中的UTF-8序列无效

来自分类Dev

PHP json_encode utf-8关于数据库的问题

来自分类Dev

PHP json_encode utf-8关于数据库的问题

来自分类Dev

在PHP中使用json_encode将UTF-8单词编码为JSON格式时显示未知字符

来自分类Dev

PHP json_encode将utf8字符串转换为字符代码

来自分类Dev

如何使JSONObject的toString()编码UTF-8字符为Unicode,就像PHP的json_encode一样?

来自分类Dev

json_encode,utf8和希腊字符

来自分类Dev

Yii2 json_encode参数中的UTF-8序列无效

来自分类Dev

Yii2 json_encode参数中的UTF-8序列无效

来自分类Dev

奇怪的PHP json_encode错误:json_encode()最多期望2个参数,给定3个

来自分类Dev

#-*-编码:utf-8-*-on python3

来自分类Dev

PHP:如何将特殊的组合字符从UTF-8转换为Latin 3

来自分类Dev

在PHP中清理UTF-8

来自分类Dev

utf8中的php字符比较

来自分类Dev

在PHP中清理UTF-8

来自分类Dev

PHP UTF 8问题

来自分类Dev

SQLite 3 UTF-8无法在PHP mojibake中获得第一个字符

来自分类Dev

将数组转换为JSON时,json_encode返回JSON_ERROR_UTF8

来自分类Dev

python 3中的字节流和utf-8

来自分类Dev

Android:PHP UTF8

来自分类Dev

PHP JSON编码为utf8并打印

来自分类Dev

如何使用 php 将 Json 打印到 Utf8

来自分类Dev

php中utf-8中来自Oracle的数据

来自分类Dev

将Python 3 unicode转换为utf-8

来自分类Dev

S3-> Redshift无法处理UTF8

来自分类Dev

python3将str解码为utf8

来自分类Dev

打开非UTF-8 CSV文件Python 3

来自分类Dev

PHP在希伯来语中写希伯来语/ UTF-8

Related 相关文章

热门标签

归档