小记parse_str
来源:互联网 发布:阿里云服务器外网ip 编辑:程序博客网 时间:2024/06/07 17:19
在官网这么是这么说明此函数的,将字符串解析成多个变量
,常用于解析前端传过来的字符串解析为数组,如下面的例子。
$_POST['form'] = 'arr[id]=100&arr[name]=%10地区已覆盖&arr[time]=2016-12-24 15:05:59';parse_str($_POST['form']);print_r($arr);
打印输出为
Array( [id] => 100 [name] => 地区已覆盖 [time] => 2016-12-24 15:05:59)
乍一看正常,但是,仔细看,会发现name
的值不完整,%10
不见了。为什么呢,再仔细看了下官网关于此函数的介绍,Note:magic_quotes_gpc 影响到了 parse_str() 这个函数的输出,和 PHP 用于填充 $_GET、 $_POST 及其他变量的机制一致。
也就是此函数来解析字符串到数组时,会对字符串按GPC来处理。其实,追踪PHP
源码(ext/standard/string.c
)也可以看到
/* {{{ proto void parse_str(string encoded_string [, array result]) Parses GET/POST/COOKIE data and sets global variables */PHP_FUNCTION(parse_str){ char *arg; zval *arrayArg = NULL; char *res = NULL; int arglen; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &arg, &arglen, &arrayArg) == FAILURE) { return; } res = estrndup(arg, arglen); if (arrayArg == NULL) { zval tmp; if (!EG(active_symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } Z_ARRVAL(tmp) = EG(active_symbol_table); sapi_module.treat_data(PARSE_STRING, res, &tmp TSRMLS_CC); } else { zval ret; array_init(&ret); sapi_module.treat_data(PARSE_STRING, res, &ret TSRMLS_CC); /* Clear out the array that was passed in. */ zval_dtor(arrayArg); ZVAL_COPY_VALUE(arrayArg, &ret); }}/* }}} */
既然知道缘由,就好着手解决了,我的办法是在前端加上js
的encodeURIComponent
URL
编码
$('input[name=form]').val("arr[id]=" + prize_id + "&arr[name]=" + encodeURIComponent($('input[name="prize"]:checked').attr('data-name')) + "&arr[time]=" + $('input[name="prize"]:checked').attr('data-time'));
这时再用一开始的代码便可以打印出正常效果
Array( [id] => 100 [name] => %10地区已覆盖 [time] => 2016-12-22 15:05:59)
0 0
- 小记parse_str
- parse_url parse_str用法
- PHP parse_str() 函数
- parse_str 相反函数
- parse_str 与 http_build_query
- PHP parse_str()函数
- php parse_str() 函数
- php中的parse_str
- parse_str函数的理解
- parse_str()之延伸
- PHP parse_str 解析字符串
- parse_str与$_SERVER['QUERY_STRING']并用
- parse_str与http_build_query的使用
- php之parse_url 、parse_str 、http_build_query
- parse_str与http_build_query的使用
- 小记
- 小记
- 小记
- Android 自己简单封装的Volley
- java封装调用存储过程
- java内部类使用小结
- 杨辉三角
- 学习SpringMVC——从HelloWorld开始
- 小记parse_str
- DBUtils
- Nginx+uWSGI安装与配置
- Android 5.0 SystemUI 视图框架
- 第二次写博客
- Oracle 表空间迁移
- 单点登录原理与简单实现
- HashMap循环遍历方式及其性能对比
- AngularJS Scope(作用域)