加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP编程:php实现处理输入转义字符的代码

发布时间:2020-12-13 02:55:47 所属栏目:PHP教程 来源:网络整理
导读:《php实现处理输入转义字符的代码》要点: 本文介绍了php实现处理输入转义字符的代码,希望对您有用。如果有疑问,可以联系我们。 先来个函数,是最近WordPress 3.6中刚刚引入的 PHP应用 /** * Add slashes to a string or array of strings. * * This should

《php实现处理输入转义字符的代码》要点:
本文介绍了php实现处理输入转义字符的代码,希望对您有用。如果有疑问,可以联系我们。

先来个函数,是最近WordPress 3.6中刚刚引入的
PHP应用
/**
 * Add slashes to a string or array of strings.
 *
 * This should be used when preparing data for core API that expects slashed data.
 * This should not be used to escape data going directly into an SQL query.
 *
 * @since 3.6.0
 *
 * @param string|array $value String or array of strings to slash.
 * @return string|array Slashed $value
 */
function wp_slash( $value ) {
    if ( is_array( $value ) ) {
        foreach ( $value as $k => $v ) {
            if ( is_array( $v ) ) {
                $value[$k] = wp_slash( $v );
            } else {
                $value[$k] = addslashes( $v );
            }
        }
    } else {
        $value = addslashes( $value );
    }
 
    return $value;
}

先说明1个PHP内置函数:get_magic_quotes_gpc()

这个函数的作用就是得到php.ini设置中magic_quotes_gpc选项的值.
而magic_quotes_gpc选项如果值为On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的致命的错误.

开启时,单引号(')、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线,否则需要手动处理,就用到了addslashes()
magic_quotes_gpc值为On时返回1,否则返回0
addslashes() 函数在指定的预定义字符前添加反斜杠.也就是上面列出的字符

但在PHP5.4以上取消了get_magic_quotes_gpc()内置函数,为了避免以后出错,所以这样过滤所有输入:


if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { 
  foreach(array('_COOKIE','_POST','_GET') as $v) { 
    foreach($$v as $kk => $vv) { 
      $kk{0} != '_' && $$v[$kk] = addslashes($vv); 
    } 
  } 
} 

在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作.
PHP中有三个设置可以实现自动对'(单引号),”(双引号),(反斜线)和 NULL 字符转转.
PHP称之为魔术引号,这三项设置分别是

magic_quotes_gpc

影响到 HTTP 哀求数据(GET,POST 和 COOKIE).不能在运行时改变.在 PHP 中默认值为 on.

这个开启时,通过GET,POST,COOKIE传递的数据会自动被转义.

如 test.php?id=abc'de"f
echo $_GET['id'];??? #? 会得到 abc'de"f
magic_quotes_gpc=On; 这个开启了,对写入数据库是没有影响的,比如 上面的$_GET['id']? 写到数据库里面,依然是 abc'de"f,

相反,如果magic_quotes_gpc=Off; 那么字符中要带有引号(不管单引号还是双引号),直接写入mysql都会直接变成空白
但是,如果你将它写入文档,而非mysql.那么它将是 abc'de"f

magic_quotes_runtime

如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义.该选项可在运行的时改变,在 PHP 中的默认值为 off.

magic_quotes_sybase

如果打开的话,将会使用单引号对单引号进行转义而非反斜线.此选项会完全覆盖 magic_quotes_gpc.如果同时打开两个选项的话,单引号将会被转义成 ”.而双引号、反斜线 和 NULL 字符将不会进行转义.

我表单内容本来是:<img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” />

<img alt=”” width=”400” height=”300” src=”/Upfiles/201105/images/1306657040.jpg” />

对策一:修改php.ini文件(修改php.ini这个办法就不说了,大家可以google下)

对策二:把转义的给取消了

第一步:找到你提交的数据比如$_POST['content'],将其改成$content=stripslashes($_POST['content']);

第二步:以后在使用$POST['content']的地方都换成$content

第三步:提交到数据库,数据库储存还是正常的:<img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” />读出来又成了

<img alt=”” width=”400” height=”300” src=”/Upfiles/201105/images/1306657040.jpg” />(这个应该知道怎么办理了吧?要不我再罗嗦下吧)

?第四步:将数据库读取的内容再用stripslashes()过滤一下.

?stripslashes()? 这个函数,删除由addslashes()函数添加的反斜杠.用于清理从数据库或 HTML 表单中取回的数据

(

PHP页面中如果不希望出现以下情况:
单引号被转义为 '
双引号被转义为 "
那么可以进行如下设置以防止:
在php.ini中设置:magic_quotes_gpc = Off)

总结如下:

1. 对于magic_quotes_gpc=on的情况,

我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示.

如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠.

2. 对于magic_quotes_gpc=off 的情况

必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是赞助mysql完成了sql语句的执行.

《php实现处理输入转义字符的代码》是否对您有启发,欢迎查看更多与《php实现处理输入转义字符的代码》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读