解決PHP json_encode() 編碼字符中包含<>時,轉化為\u003E\u003C


一、PHP json_encode里面經常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES

php格式化json的函數

json_encode($value,$options)

其中有2個比較常用到的參數

JSON_UNESCAPED_UNICODE(中文不轉為unicode ,對應的數字 256

JSON_UNESCAPED_SLASHES (不轉義反斜杠,對應的數字 64

通常json_encode只能傳入一個常量,如果同時使用2個常量怎么辦?

方法一:

JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320

使用方法:json_encode($arr,320);即可完成同時使用2個常量。

<?php

$arr = array('key'=>'中文/同時生效');
echo json_encode($arr,320);  //輸出{"key":"中文/同時生效"}

$arr = array('key'=>'中文/同時生效');
//默認中文斜杠都會轉義
echo json_encode($arr) ."\n";   //輸出{"key":"\u4e2d\u6587\/\u540c\u65f6\u751f\u6548"}

//中文不轉為unicode 
echo json_encode($arr,256)."\n";//輸出{"key":"中文\/同時生效"}

//不轉義斜杠
echo json_encode($arr,64)."\n"; //輸出{"key":"\u4e2d\u6587/\u540c\u65f6\u751f\u6548"}

//中文斜杠都不轉義
echo json_encode($arr,320)."\n";//輸出{"key":"中文/同時生效"}

方法二: 

$arr2 = [ 'a' => '你好', 'b'=> 'aaa/bbb\' ];
echo json_encode($arr2, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

二、php中讓json_encode不自動轉義斜杠“/”

最近將使用爬蟲爬取的鏈接保存到 mysql 數據庫中時,發現我將鏈接使用 json_encode 保存時候,在數據庫中卻顯示了轉義字符,我並不需要這轉義的,看起來不清晰而且占用存儲空間。

 1 <?php
 2 /*
 3 php中讓json_encode不自動轉義斜杠“/”
 4  */
 5 $a = array(
 6     'http://www.baidu.com',
 7     'http://www.baidu.com',
 8     'http://www.baidu.com',
 9     'http://www.baidu.com',
10     'http://www.baidu.com'
11 );
12 // 其一 正則替換
13 $a = str_replace("\\/", "/", json_encode($a));
14 var_dump($a);
15 // 其二 php版本>5.4
16 var_dump(json_encode($a,JSON_UNESCAPED_SLASHES));
三、接下來看一下第二個參數:  options參考選自

        JSON_HEX_TAG (integer)    所有的 < 和 > 轉換成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。

        JSON_HEX_AMP (integer)    所有的 & 轉換成 \u0026。 自 PHP 5.3.0 起生效。

        JSON_HEX_APOS (integer)   所有的 ' 轉換成 \u0027。 自 PHP 5.3.0 起生效。

        JSON_HEX_QUOT (integer)   所有的 " 轉換成 \u0022。 自 PHP 5.3.0 起生效。

        JSON_FORCE_OBJECT (integer)     使一個非關聯數組輸出一個類(Object)而非數組。 在數組為空而接受者需要一個類                (Object)的時候尤其有用。 自 PHP 5.3.0 起生效。

        JSON_NUMERIC_CHECK (integer)    將所有數字字符串編碼成數字(numbers)。 自 PHP 5.3.3 起生效。

        JSON_BIGINT_AS_STRING (integer)    將大數字編碼成原始字符原來的值。 自 PHP 5.4.0 起生效。

        JSON_PRETTY_PRINT (integer)    用空白字符格式化返回的數據。 自 PHP 5.4.0 起生效。

        JSON_UNESCAPED_SLASHES (integer)    不要編碼 /。 自 PHP 5.4.0 起生效。

        JSON_UNESCAPED_UNICODE (integer)     以字面編碼多字節 Unicode 字符(默認是編碼成 \uXXXX)。 自 PHP 5.4.0 起生效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM