写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)相关的知识,希望对你有一定的参考价值。

    今天写代码用python处理完数据,传给php服务器后,发现接收不到数据,因为是跨域,所以加了消息头:header(‘Access-Control-Allow-Origin:*‘);但是并没有什么卵用,后来不停地百度,东拼西凑终于找到了解决方案。

方案如下:

    1。传过来的数据要加header头:headers = {‘Content-Type‘: ‘application/json‘}

    2。PHP接收数据时要用:$GLOBALS[‘HTTP_RAW_POST_DATA‘]。

      原因如下:  $_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。  PHP默认只识别application/x-www.form-urlencoded标准的数据类型,也就是可以正常接受的post数据。

            如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!故保留原型,交给$GLOBALS[‘HTTP_RAW_POST_DATA‘] 来接收。

 

php接收到数据以后,上传mysql后发现中文乱码,在PHP中加入header("Content-type: text/html; charset=utf-8");mysql中设置字符集utf-8也无效,后来发现是pdo没有设置中文编码,加上以后,遂成功。

另附 

  utf-8的使用方法

 “UTF-8”是标准写法,php在Windows下边英文不区分大小写,所以也可以写成“utf-8”。“UTF-8”也可以把中间的“-”省略,写成“UTF8”。一般程序都能识别,但也有例外(如下文),为了严格一点,最好用标准的大写“UTF-8”。

数据库中只能使用“utf8”(MySQL) 在mysql的命令模式中只能使用“utf8”,不能使用“utf-8”,也就是说在PHP程序中只能使用“set names utf8(不加小横杠)”,如果你加了“-”此行命令将不会生效,但是在php中header时却要加上“-”,因为IE不认识没杠的“utf8”,原因见下文。

 

PHP中的header:

 <?php header(‘Content-Type: text/html; charset=UTF-8‘); ?> //奇怪了:Content-Tyep用冒号,Chatset却是等号。
静态文件使用:
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
总结:【只有在MySQL中可以使用“utf-8”的别名“utf8”,但是在其他地方一律使用大写“UTF-8”。】

 

 





以上是关于写代码中遇到的问题(php接收不到传过来的json数据,php使用utf8的用法)的主要内容,如果未能解决你的问题,请参考以下文章

PHP 后台怎么接收post请求的参数

java后台要怎么接收从app那边传过来的图片(app那边传的是图片二进制流)?具体代码能写一下吗?

asp页面用啥代码接收ajax传过来的json数据

在PHP中怎么接收post过来的JSON数据

在struts2中如何接收ajax传过来的参数

C#服务器端接收并解析android客户端传过来的json数据