本文目錄一覽:
- 1、PHP 讀取不了Json?
- 2、Content-Encoding設置為utf-8和application/json的區別
- 3、微信小程序header頭信息application/json處理數據php端如何接受?
- 4、php 輸出json及顯示json中的中文漢字詳解及實例
- 5、php和安卓怎麼實現數據(如json)交互
PHP 讀取不了Json?
由於js的數組格式和php的數組格式不一樣很難通訊所以有了 json 這樣的玩意
用json_decode()函數將JSON 格式的字元串編碼。
?php
$json = ‘{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}’;
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?
以上常式會輸出:
object(stdClass)#1 (5) {
[“a”] = int(1)
[“b”] = int(2)
[“c”] = int(3)
[“d”] = int(4)
[“e”] = int(5)
}
array(5) {
[“a”] = int(1)
[“b”] = int(2)
[“c”] = int(3)
[“d”] = int(4)
[“e”] = int(5)
}[1]
還有個json_encode
用json_encode()函數對數組進行JSON編碼。
?php
$arr = array (‘a’=1,’b’=2,’c’=3,’d’=4,’e’=5);
echo json_encode($arr);
?
以上常式會輸出:
{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}[1]希望能幫到你,我還在後盾網上課學習呢現在沒時間,有不會的可以問我,一起研究研究吧(๑•॒̀ ູ॒•́๑)啦啦啦
Content-Encoding設置為utf-8和application/json的區別
不是同一個東西, mime-type,encoding是content-type兩個組成部分
前者代表請求的資源是什麼類型的資源:文本,還是圖片,還是應用程序等等
application/json代表請求的資源是:應用程序類型下的,json類型(某類型/子類型)
類似的,也會遇到 img/bmp , text/plain
伺服器和瀏覽器會根據不同的mime類型來解析請求,並做出相應回應:比如伺服器收到.php的請求,如果設置正確,一般對應是 application類型,伺服器就會用相應的用處理程序映射去執行這個php,比如客戶端收到application/json的響應,就知道返回來的是一個json字元串,比如收到img/jpg,就知道是個jpg圖片。有的時候打開一個網頁,會發現它顯示的是網頁源代碼,而不是一個正常的頁面,這種情況多半就是伺服器上mime的問題,可能是設置錯了,也可能是沒有添加相應的處理程序映射。
encoding代表編碼,客戶端和伺服器通信的時候,所有數據都會變成二進位來傳輸,碰到英文字元數字這些還好,如果是漢字,不同編碼下它的二進位內容是完全不一樣的,所以必須兩邊統一編碼才可以正常通信。碰到100次網頁亂碼,其中至少有95次是因為編碼不一致造成的,所以試著切換一下不同的編碼,多半會發現亂碼變正常
微信小程序header頭信息application/json處理數據php端如何接受?
微信小程序中wx.request所調用域名是有嚴格規定的,不是隨便用個url就行的,下面是官方文檔的說明:
每個微信小程序需要事先設置一個通訊域名,小程序只可以跟指定的域名與進行網路通信。包括普通 HTTPS 請求(request)、上傳文件(uploadFile)、下載文件(downloadFile) 和 WebSocket 通信(connectSocket)
配置流程
伺服器域名請在 「小程序後台-設置-開發設置-伺服器域名」 中進行配置,配置時需要注意:
域名只支持 https (request、uploadFile、downloadFile) 和 wss (connectSocket) 協議;
域名不能使用 IP 地址或 localhost;
域名必須經過 ICP 備案;
出於安全考慮,api.weixin.qq.com 不能被配置為伺服器域名,相關API也不能在小程序內調用。 開發者應將 appsecret 保存到後台伺服器中,通過伺服器使用 appsecret 獲取 accesstoken,並調用相關 API;
對於每個介面,分別可以配置最多 20 個域名。
php 輸出json及顯示json中的中文漢字詳解及實例
php
輸出json及顯示json中的中文漢字
在php中,我們經常需要將數組輸出json,只需要使用json_encode函數處理一下數組即可,但有的時候數組裡面有中文,使用json_encode函數處理後中文字元被編碼成了Unicode,如何才能在json中顯示中文呢?請看下文。
首先介紹一下php輸出json格式:
一種最簡單的用法,就是把數組直接輸出為json,如下:
?php
$arr
=
array(‘p1’=’ni”hao’,’p2’=2,’ch’=’碼農你好!’);
$json
=
json_encode($arr);
echo
$json;
?
輸出的結果為:
{“p1″:”ni\”hao”,”p2″:2,”ch”:”\u7801\u519c\u4f60\u597d\uff01″}
這裡要注意:
雙引號在json中會被自動編碼為\”,這個很好理解,js中字元串中是不允許出來單引號、雙引號和反斜杠的。
中文字元被編碼成了Unicode
如果是寫介面,那直接這樣輸出就夠了,中文無需去做處理。等到了客戶端,再去把Unicode的中文轉成漢字即可。但如果要在伺服器端直接輸出漢字出來,那我們可以做如下處理。
?php
$arr
=
array(‘p1’=’nihao’,’p2’=2,’ch’=’碼農你好!’);
$json
=
json_encode($arr);
echo
decodeUnicode($json);
function
decodeUnicode($str){
return
preg_replace_callback(‘/\\\\u([0-9a-f]{4})/i’,
create_function(
‘$matches’,
‘return
mb_convert_encoding(pack(“H*”,
$matches[1]),
“UTF-8”,
“UCS-2BE”);’
),
$str);
}
?
輸出:
{“p1″:”ni\”hao”,”p2″:2,”ch”:”碼農你好!”}
這個操作很簡單,其實就是把輸出結果匹配一下,把Unicode還原成了漢字。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
php和安卓怎麼實現數據(如json)交互
PHP是一種創建動態交互性站點的伺服器端腳本語言,優勢:PHP腳本語言應用廣泛,開源免費,最重要的是入門簡單,容易掌握。PHP能夠生成動態頁面內容PHP能夠創建、打開、讀取、寫入、刪除以及關閉伺服器上的文件PHP能夠接收表單數據PHP能夠發送並取回cookiesPHP能夠添加、刪除、修改資料庫中的數據PHP能夠限制用戶訪問網站中的某些頁面能夠運行於各種平台,幾乎兼容所有WEB伺服器,支持多種資料庫1.我們想要運行PHP,首先要有個web伺服器,一般可以在本地部署一個伺服器用來測試。所以需要下載個XAMPP,我們在百度搜索apache friends,直接打開第一個鏈接,然後毫不猶豫的下載最新版本(PHP7.0.9),下載後執行安裝。2.2.現在來配置XAMPP來部署一個本地伺服器,打開只需要啟用Apache服務,下面我就啟動成功了。如果啟用不成功,Port(s)沒有數據顯示,就證明你監聽的PC埠被佔用,你可以在Config的里第一個選項進行監聽埠的更改,找到記事本里的Listen 8080命令改後綴,這裡我把監聽埠改成空閑的8080了。3.下面來打開Dreamweaver建一個伺服器站點。站點配置:本地站點文件夾一定要選擇你裝Xampp路徑的htdocs的目錄里。4.添加伺服器配置:這樣站點就設置好了,然後在站點文件夾創建server.php,腳本如下?php //設置頁面內容是html編碼格式是utf-8 //header(“Content-Type: text/plain;charset=utf-8”); header(‘Access-Control-Allow-Origin:*’); header(‘Access-Control-Allow-Methods:POST,GET’); header(‘Access-Control-Allow-Credentials:true’); header(“Content-Type: application/json;charset=utf-8”); //header(“Content-Type: text/xml;charset=utf-8”); //header(“Content-Type: text/html;charset=utf-8”); //header(“Content-Type: application/javascript;charset=utf-8”); //定義一個多維數組,包含員工的信息,每條員工信息為一個數組 $staff = array ( array(“name” = “喬布斯”, “number” = “101”, “sex” = “男”, “job” = “IOS開發工程師”), array(“name” = “比爾蓋茨”, “number” = “102”, “sex” = “男”, “job” = “微軟開發工程師”), array(“name” = “陳美麗”, “number” = “103”, “sex” = “女”, “job” = “安卓開發工程師”), array(“name” = “黃力”, “number” = “104”, “sex” = “男”, “job” = “Java開發工程師”), array(“name” = “車神”, “number” = “105”, “sex” = “男”, “job” = “遊戲開發工程師”), array(“name” = “測試貓”, “number” = “106”, “sex” = “男”, “job” = “web前端開發工程師”) ); //判斷如果是get請求,則進行搜索;如果是POST請求,則進行新建 //$_SERVER是一個超全局變數,在一個腳本的全部作用域中都可用,不用使用global關鍵字 //$_SERVER[“REQUEST_METHOD”]返回訪問頁面使用的請求方法 if ($_SERVER[“REQUEST_METHOD”] == “GET”) { search(); } elseif ($_SERVER[“REQUEST_METHOD”] == “POST”){ create(); } //通過員工編號搜索員工 function search(){ //檢查是否有員工編號的參數 //isset檢測變數是否設置;empty判斷值為否為空 //超全局變數 $_GET 和 $_POST 用於收集表單數據 if (!isset($_GET[“number”]) empty($_GET[“number”])) { echo ‘{“success”:false,”msg”:”參數錯誤”}’; return; } //函數之外聲明的變數擁有 Global 作用域,只能在函數以外進行訪問。 //global 關鍵詞用於訪問函數內的全局變數 global $staff; //獲取number參數 $number = $_GET[“number”]; $result = ‘{“success”:false,”msg”:”沒有找到員工。”}’; //遍歷$staff多維數組,查找key值為number的員工是否存在,如果存在,則修改返回結果 foreach ($staff as $value) { if ($value[“number”] == $number) { $result = ‘{“success”:true,”msg”:”找到員工:員工編號:’ . $value[“number”] . ‘,員工姓名:’ . $value[“name”] . ‘,員工性別:’ . $value[“sex”] . ‘,員工職位:’ . $value[“job”] . ‘”}’; break; } } echo $result; } //創建員工 function create(){ //判斷信息是否填寫完全 if (!isset($_POST[“name”]) empty($_POST[“name”]) !isset($_POST[“number”]) empty($_POST[“number”]) !isset($_POST[“sex”]) empty($_POST[“sex”]) !isset($_POST[“job”]) empty($_POST[“job”])) { echo ‘{“success”:false,”msg”:”參數錯誤,員工信息填寫不全”}’; return; } //TODO: 獲取POST表單數據並保存到資料庫 //提示保存成功 echo ‘{“success”:true,”msg”:”員工:’ . $_POST[“name”] . ‘ 信息保存成功!”}’; } ? 我們可以在server.php文件數組$staff里的數據進行查詢,並且可以實現添加數據的功能,下面來創建demo.htmlstyle body,input,button,select,h1{ font-size:20px; line-height:18px; } /style script window.onload=function(){ document.getElementById(“search”).onclick=function(){//查詢數據 //發送Ajax查詢請求並處理 var request=new XMLHttpRequest(); //open(“方法(GET查詢,POST添加)”,”打開的文件數據”,處理方式(同步為false非同步為true,不填默認為true)); request.open(“GET”,”server.php?number=”+document.getElementById(‘keyword’).value); request.send(); request.onreadystatechange=function(){ if(request.readyState===4){//當伺服器請求完成 if(request.status===200){//status==200為伺服器請求成功 var data=JSON.parse(request.responseText); if(data.success){//數據填寫符合要求 document.getElementById(‘searchResult’).innerHTML=data.msg; }else{//數據填寫不符號要求 document.getElementById(‘searchResult’).innerHTML=”出現錯誤:”+data.msg; } }else{//伺服器請求失敗 alert(“發生錯誤:”+request.status); } } } } document.getElementById(“save”).onclick=function(){//添加數據 //發送Ajax添加數據請求並處理 var request=new XMLHttpRequest(); //open(“方法(GET查詢,POST添加)”,”打開的文件數據”,處理方式(同步為false非同步為true,不填默認為true));; request.open(“POST”,”server.php”); //定義data取得用戶所填寫的數據,並且send(data)到伺服器 var data=”name=”+document.getElementById(“staffName”).value +”number=”+document.getElementById(“staffNumber”).value +”sex=”+document.getElementById(“staffSex”).value +”job=”+document.getElementById(“staffJob”).value; request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);//在POST方法里必寫,否則添加數據不起作用 request.send(data); request.onreadystatechange=function(){ if(request.readyState===4){//當伺服器請求完成 if(request.status===200){//status==200為伺服器請求成功 var data=JSON.parse(request.responseText); if(data.success){//數據填寫符合要求 document.getElementById(‘createResult’).innerHTML=data.msg; }else{//數據填寫不符合要求 document.getElementById(‘createResult’).innerHTML=”出現錯誤:”+data.msg; } }else{//伺服器請求失敗 alert(“發生錯誤:”+request.status); } } } } } /script body h1員工查詢/h1 label請輸入員工編號:/label input type=”text” id=”keyword”/ button id=”search”查詢/button p id=”searchResult”/p h1員工創建/h1 label請輸入員工姓名:/label input type=”text” id=”staffName”/br label請輸入員工編號:/label input type=”text” id=”staffNumber”/br label請輸入員工性別:/label select id=”staffSex” option男/option option女/option /selectbr label請輸入員工職位:/label input type=”text” id=”staffJob”/br button id=”save”保存/button p id=”createResult”/p /body 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249492.html