php关于反斜杠转义字符.docx
- 文档编号:23361452
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:13
- 大小:20.63KB
php关于反斜杠转义字符.docx
《php关于反斜杠转义字符.docx》由会员分享,可在线阅读,更多相关《php关于反斜杠转义字符.docx(13页珍藏版)》请在冰豆网上搜索。
php关于反斜杠转义字符
php程序中检测状态用get_magic_quotes_runtime(),返回0表示关闭本功能;返回1表示本功能打开。
若magic_quotes_runtime()打开时,所有外部引入的数据库资料或者文件等等都会自动转为含有反斜线溢出字符的资料。
php函数set_magic_quotes_runtime(0);
0-关闭1-打开
boolset_magic_quotes_runtime(intnew_setting)
Setthecurrentactiveconfigurationsettingofmagic_quotes_runtime(0foroff,1foron).
表单传给PHP的变量(这个变量的值是html源代码,所以有很多引号,斜杠)被加上了反斜杠,
然后PHP设法传给PCRE(一个正则表达式库),又因为反斜杠无法匹配.
说明如果php.int配置启动了magicquotesruntime,好么在客房户端传达到服务器时,$REQUEST[]数组将在上传时就被改造,即我们在服务器端使用$REQUEST[]是已经被加了反斜杠了,如果此时想去掉这些反斜械的话,可以使用stripslashes();进行复原。
1.
addslashes();
顾名思义,就是给引号加上反斜杠.
如
$eg = addslashes("单引号'示例");
mud (你看不到我中......) 于Sat Aug 2 20:
56:
42 2003)
提到:
如果传过来这样一个字符串
C:
/Windows/a.txt
而PHP对于/是不添加\的,但是我需要使用preg_xxx函数,这些正则处理函数却是对/过敏的
.
怎么办?
PS:
你说的这两个函数我一直在用,还有一个也很好用quotemeta,但是它们都不能满足我的
要求.
当然可以自己写个函数处理这些,但是我想知道有没有任何成熟的做法.
【 在 yuelinniao 的大作中提到:
】
:
呵呵,有两个函数:
:
1.
:
addslashes();
:
顾名思义,就是给引号加上反斜杠.
:
如
:
$eg = addslashes("单引号'示例");
:
--> $eg == "单引号\'示例"
:
2.
:
stripslashes();
:
去掉反斜杠
:
如
:
$eg = stripslashes('双引号\"示例');
:
--> $eg == '双引号"示例';
:
其实,表单提交自动加上反斜杠是 php 设置的默认值,可以改成不加的。
:
不过一般为了安全起见,不必改。
:
又因为大家都比较懒,所以欧也不想说是哪个设置了。
:
呵呵 :
)
:
你把传过来的东西用 stripslashes 函数处理一下,转义反斜杠就去掉了。
:
//enjoy
:
【 在 mud (你看不到我中......) 的大作中提到:
】
:
(以下引言省略...)
neogeo (被率领的40个马甲之一,幸好未掉队) 于Sat Aug 2 21:
28:
49 2003)
提到:
肯定得用 str_replace() 一下吧
【 在 mud (你看不到我中......) 的大作中提到:
】
:
如果传过来这样一个字符串
:
C:
/Windows/a.txt
:
而PHP对于/是不添加\的,但是我需要使用preg_xxx函数,这些正则处理函数却是对/过敏的
:
.
:
怎么办?
:
:
PS:
你说的这两个函数我一直在用,还有一个也很好用quotemeta,但是它们都不能满足我的
:
要求.
:
当然可以自己写个函数处理这些,但是我想知道有没有任何成熟的做法.
:
【 在 yuelinniao 的大作中提到:
】
:
(以下引言省略 ... ...)
mud (你看不到我中......) 于Sat Aug 2 22:
42:
39 2003)
提到:
自己写了个对/.^*?
加\的函数.
然后就可以爽爽的用preg_xxx了.
在做如csdn那样的帖文章的东东,要分析源码中的IMG src,然后把那些文件上载到服务器,
并且更改客户提交源码的img src.
累,烦.不过终于可以了.
【 在 neogeo 的大作中提到:
】
:
肯定得用 str_replace() 一下吧
:
【 在 mud (你看不到我中......) 的大作中提到:
】
neogeo (被率领的40个马甲之一,幸好未掉队) 于Sat Aug 2 22:
57:
10 2003)
提到:
呵呵
贴几个关键代码介绍介绍?
方便大家学习,也好增强精华区。
呵呵,(斑竹马甲)
【 在 mud (你看不到我中......) 的大作中提到:
】
:
自己写了个对/.^*?
加\的函数.
:
然后就可以爽爽的用preg_xxx了.
:
在做如csdn那样的帖文章的东东,要分析源码中的IMG src,然后把那些文件上载到服务器,
:
并且更改客户提交源码的img src.
:
累,烦.不过终于可以了.
:
【 在 neogeo 的大作中提到:
】
mud (你看不到我中......) 于Tue Aug 5 15:
07:
39 2003)
提到:
代码太丑了,大家见谅:
// $canon_content是用户提交的html源代码
$canon_content = stripslashes($canon_content);
$p_arr = array();
$r_arr = array();
// 构造pattern,匹配的xxx部分,对于xxx部分有一个限制就是屏蔽那些
http和ftp开头的,这样做的用意是如果改文件是引用的网上的图片文件,那么就没有必要提
醒用户上传.
$pattern = "/]*src=\"((?
!
(http|ftp|\.|\/)).*?
)\"/i";
// 找到这些src的值
preg_match_all($pattern, $canon_content, $matches, PREG_SET_ORDER);
// 如果的确能够找到(考虑用户可能没有提交图片,那么count(...)返回0
if(count($matches)>0)
{
// 输出添加图片的表单.因为php并不能访问本地文件系统,所以还是需要使用input-
file控件的.
echo "添加图片!
";
echo "
";}
总体觉得比较烦,而我又不是一个语言表达能力强的人.
如果看出大概的意思,我再帖下一个页面:
upload_image2.php.
【 在 neogeo 的大作中提到:
】
:
呵呵
:
贴几个关键代码介绍介绍?
方便大家学习,也好增强精华区。
:
呵呵,(斑竹马甲)
:
【 在 mud (你看不到我中......) 的大作中提到:
】
neogeo (被率领的40个马甲之一,幸好未掉队) 于Tue Aug 5 15:
51:
13 2003)
提到:
嗯,看懂了。
现在提交图片还得用户自己动手,还不如直接构造表单后直接提交,用户看不出来,
就发现图片已经上去了。
不过这样如果文件不存在又有点麻烦。
呵呵,想法不错,思路也很清晰。
代码风格和我有点像,呵呵,看着亲切。
有几点建议,大家探讨:
1) if(count($matches)>0)
....
for($i=0;$i 这几句不如改成: $count = count($matches); if($count > 0) .... for($i=0;$i<$count;$i++) 这样 count() 函数只执行一遍,原来要执行 count($matches)+1 遍 2) echo ""; 这样还不如写成: echo ''; 一方面,用 "" 括起来的php解析的时候要扫描整个字符串一遍,有没有要替换的 php变量。 如 $temp = 'yy'; echo "xx $temp xx"; 输出是 xx yy xx 而 echo 'xx $temp xx'; 输出时 xx $temp xx 速度肯定下面那个快(如果不需要替换) 另一方面,要 \" 转义成 " 也有速度消耗,而且更严重的是看起来不爽。 呵呵,我是这么认为的。 嗯,继续贴。 大家也一起参与啊~! 探讨一个问题的解决对自己帮助很大的。 【 在 mud (你看不到我中......) 的大作中提到: 】 : 代码太丑了,大家见谅: : // $canon_content是用户提交的html源代码 : $canon_content = stripslashes($canon_content); : $p_arr = array(); : $r_arr = array(); : // 构造pattern,匹配的xxx部分,对于xxx部分有一个限制就是屏蔽.. : http和ftp开头的,这样做的用意是如果改文件是引用的网上的图片文件,那么就没有必.. : 醒用户上传. : $pattern = "/]*src=\"((? ! (http|ftp|\.|\/)).*? )\"/i"; : // 找到这些src的值 : preg_match_all($pattern, $canon_content, $matches, PREG_SET_ORDER); : // 如果的确能够找到(考虑用户可能没有提交图片,那么count(...)返回0 : if(count($matches)>0) : { : // 输出添加图片的表单.因为php并不能访问本地文件系统,所以还是需要使用input- : file控件的. : echo "添加图片! "; : echo "