Outline:

无法获取post请求中的url参数的问题

中文存入数据表后为空字符串

1. 无法获取post请求中的url参数的问题

ThinkPHP3.1.3中,如果提交的post请求中,如果要在url中写入参数,如下面的例子:

var url = '/index.php?g=Manager&m=Msgwall&a=changestatus';
var args = {
'id' : id,
'status' : status
};
$.post(url, args, function(result){
// 返回的操作
});

因为我用的是从别处申请的虚拟服务器,并不支持PATHINFO模式,我就舍易求繁了,用传统的传参方式指定分组、模块和操作。按照一般的思路,并不想把这些信息都加到args里面,用PATHINFO模式更是这样了,但是,ThinkPHP3.1.3里面,被封装的$this->_param只能拿到id和status参数,拿不到g、m和a这些,经过搜索官网,找到了解决方案,需要找到ThinkPHP/Lib/Core/Action.class.php,把第243行修改为:

$input = array_merge($_GET,$_GET[C('VAR_URL_PARAMS')],$input);

一定要保证$input放在最后,这样就可以了。

但是,过了一个年,也不知道改了什么,突然又不行了,经过调试发现isset($_GET[C('VAR_URL_PARAMS')])这个地方返回了false。

所以要进一步修改,在原if后面加上else,内容如下:

$input = array_merge($_GET,$input);

从_param的定义来进行分析,该函数实现如下:

case '_param'   :
switch($_SERVER['REQUEST_METHOD']) {
case 'POST':
$input = $_POST;
break;
case 'PUT':
parse_str(file_get_contents('php://input'), $input);
break;
default:
$input = $_GET;
}
if(C('VAR_URL_PARAMS') && isset($_GET[C('VAR_URL_PARAMS')])){
$input = array_merge($input,$_GET[C('VAR_URL_PARAMS')]);
}
break;

原来的情况下,$input只是合并了原来的$input(POST或者GET方法正统的参数)和$_GET['_URL_']的参数,而$_GET['_URL_']只包含PATHINFO格式的地址中包含的参数列表,因此,传统传递方式的参数,就无法获取传统$_GET的参数,因此,使用

$input = array_merge($_GET,$_GET[C('VAR_URL_PARAMS')],$input);

替换该语句,将$input放到最后,目的是覆盖前面可能通过URL注入的同名变量,否则$input的参数就可能被URL同名参数覆盖。

这一块的最终代码变为:

if(C('VAR_URL_PARAMS') && isset($_GET[C('VAR_URL_PARAMS')])){
$input = array_merge($_GET,$_GET[C('VAR_URL_PARAMS')],$input);
} else {
$input = array_merge($_GET,$input);
}

2. getlastsql()可显示正确的SQL语句,但中文存入数据表后为空字符串

这个是由于编码问题造成的,用getlastsql()可以看到正确的SQL输出,但是查看却发现是GBK编码,而数据表是UTF-8,因此存数据出现问题。

解决方法是:可能是表单所在页面没有指定编码,加上下面的语句即可:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

或者,如果知道提交过来的参数一定是什么编码,比如gbk,可以使用

auto_charset($content, "gbk", "utf-8");

注:我没有试过这个函数,位置在ThinkPHP/Extend/Function/extend.php中,后面的参数不写就默认是"gbk"和"utf-8",需要引入才能用。

【PHP开发】ThinkPHP3.1.3问题集及解决方法的更多相关文章

  1. Android开发华为手机无法看log日志解决方法

    Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...

  2. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  3. Android开发环境搭建时遇到问题的解决方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_loajie/article/details/33823637 Android开发环境搭建 ...

  4. HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析

    随着移动社区兴起,势必带动HTML5的革命.未来一两年内,HTML5移动游戏必将呈现大爆发趋势. 以下是整理的HTML5游戏研发.市场趋势以及渠道布局和技术解决方案的内容.希望大家能从本文中找到对HT ...

  5. 〖Android〗从Android Studio转为Eclipse开发项目运行程序闪退的解决方法

    很久没有撸Android App开发了- 最近把一个月前通过反编译.二次修改的Android SSHD项目进行简单修改一下: 突然发现迁移项目时,报了一个错误,同时还出现了闪退情况: - ::): t ...

  6. 关于DE2-115 FPGA开发板无法烧写程序的解决方法

    友晶科技推出的DE2-115 FPGA开发板,有时候莫名奇妙,无法烧写或者固化程序.利用JTAG 向DE2-115开发板烧写.sof文件失败,并提示以下错误,如图1和图2所示 图1 图2 解决方法:只 ...

  7. (转)jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法

    本文转载自:http://hedyn.iteye.com/blog/856040 在JDBC中调用SQL Server中的存储过程时出现如下异常: com.microsoft.sqlserver.jd ...

  8. 在英文Win7操作系统上部署C#开发的Web系统出现乱码的解决方法

    今天,迁移机器,把一个使用C#开发的Web系统部署到一台英文版Win7操作系统上,部署好以后,系统可以登录,只是网页上出现汉字乱码. 在这台电脑上,打开Word等文本编辑器,是可以正常输入.显示中文的 ...

  9. 前端webview开发中遇到的一些问题及其解决方法

    最近做了一个webview中的兑换页面,本来以为很简单,想不到遇到了远远超出预期数量的BUG,记下来,以备后患. 1 inline-block元素折行 BUG描述:现在我有三个DIV,要在一列等宽排列 ...

随机推荐

  1. 《手把手教你学C语言》学习笔记(7)---程序的输入与输出

    程序设计中,为了观察程序的运行状态和结构,需要输出指定的内容:为了让程序能够更加灵活,可以根据需求输入内容,让计算机处理和运行:所以程序的输入输出就显的尤为重要.主要包括printf和scanf函数. ...

  2. css命名推荐

    CSS命名推荐规范:个人收藏 方便查阅 页面结构: 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导 ...

  3. Codeforces 754A(搜索)

    设s[i][j]为序列i到j的和,当s[i][j]≠0时,即可从i跳到j+1.目标为从1跳到n+1,所以按照题意暴力即可. #include <bits/stdc++.h> using n ...

  4. encodeURI 解码 编码

    var uriStr = "http://www.baidu.com?name=张三&num=001 zs"; var uriec = encodeURI(uriStr); ...

  5. 2016集训测试赛(十九)Problem A: 24点大师

    Solution 这到题目有意思. 首先题目描述给我们提供了一种非常管用的模型. 按照题目的方法, 我们可以轻松用暴力解决20+的问题; 关键在于如何构造更大的情况: 我们发现 \[ [(n + n) ...

  6. BZOJ 4197 NOI 2015 寿司晚宴

    题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...

  7. SQL 语句基础

    一 查询常量1. SELECT 学生编号, 学生姓名,性别 FROM tb_Student2. SELECT 学生姓名 AS 姓名, 性别 AS 学生性别 FROM tb_Student3. SELE ...

  8. 2016.3.23 集成新版activiti-modeler(5.17+)到项目中

    书:<activiti实战> 博客: http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html h ...

  9. WinForm启动时接收参数

    1 默认的Main函数,修改如下: static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [ST ...

  10. 使用Shiro

    一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙.Shiro的应用不依赖任何容器,它也可以在JavaSE下使用.但是最常用的环境还是JavaEE.下面以 ...