preg_replace—替换内容中包括$特殊符号时
来源:互联网 发布:js中div显示隐藏 编辑:程序博客网 时间:2024/06/05 19:12
一 问题描述
用户登录时,登录功能各用户都是ok的,某一用户出现登录失败的情况,经发现是此客户登录密码中包含特殊符号$。
二 分析问题
框架中where字段的拼接是通过preg_replace方式实现的,如下代码是一个精简的demo示例:
<?php
$str = "password = ?";
$value = "1$$$439u4";
$pattern[] = "/[']?\?[']?/";
$str = preg_replace($pattern, $value, $str, 1);
var_dump($str);exit;
?>
说明:$str为要拼接的where字段,需要将?替换为password的具体值$value,
preg_replace的第二个参数支持后向引用,即$n可以替换匹配模式$pattern中的第n个括号处理的子捕获组,n可以是0-99,
所以$value中包括$特殊符号并且后面跟有数字,这样$43便被解析为匹配模式中的第43个括号子捕获组(此处无43个,便替换为空),这样?被替换为了"1$$9u4",而不是"1$$$439u4",这样sql执行时和数据库里的密码不一致,便会登录失败。
三 解决问题
*在preg_replace前,先用其他符号替换$符号,执行preg_replace后,再用$符号替换回来,这样便可避免在preg_match时$被解析。
<?php
$str = "password = ?";
$value = "1$$$439u4";
$value = str_replace("$","问号",$value);
$pattern[] = "/[']?\?[']?/";
$str = preg_replace($pattern, $value, $str, 1);
$str = str_replace("问号","$",$str);
var_dump($str);exit;
?>
参考php手册:http://php.net/manual/zh/function.preg-replace.php
- preg_replace—替换内容中包括$特殊符号时
- preg_replace替换内容中间部分
- 解决replaceAll替换字符串中包括特殊符号时出现的问题
- ecshop中preg_replace替换为preg_replace_callback需要注意的事项
- PHP正则替换preg_replace
- preg_replace 数组替换
- php中 用preg_replace替换config.php中的数组并赋值
- 121----$rste = preg_replace("/$a/",$b,$rst);//***在数组中替换
- oracle替换掉字段中存在的特殊符号以及空格
- PHP字符串正则替换函数preg_replace
- preg_replace统一替换图片的title
- php 使用 preg_replace 一次替换多个值
- php 正则搜索和替换 preg_replace
- php preg_replace空格无法替换问题
- PHP 字符串正则替换函数preg_replace
- preg_replace()替换成preg_replace_callback() php5.5之后
- java特殊符号替换
- 批处理中替换文本内容
- Jquery EasyUI 按钮控制面板显示与隐藏demo(1)
- 身份认证与session对象
- jsp一改动,就需要重启的解决方案
- OpenCV 编译出的so库改名办法
- 工厂方法模式
- preg_replace—替换内容中包括$特殊符号时
- sonar rule
- JAVA疯狂讲义第三版4.6.6数组的应用举例代码功能扩展
- 简单的前端轮播(无自动跳转)
- STM32F4的HAL库开启串口空闲中断
- JPA主键生成策略
- HTTP协议格式
- PPT这样学就对了之首页制作
- Swift基础之iOS 10.3 如何更换 app 图标