php实现处理输入转义字符的代码 |
本文标签:php转义字符处理 先来个函数,是最近WordPress 3.6中刚刚引入的
/** * 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选项的值 。 开启时,单引号()、双引号(”)、反斜线(\)与 NUL(NULL 字符)等字符都会被加上反斜线,否则需要手动处理,就用到了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的数据时,常常要对数据的引号进行转义操作 。 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE) 。不能在运行时改变 。在 PHP 中默认值为 on 。 这个开启时,通过GET,POST,COOKIE传递的数据会自动被转义 。 如 test.php?id=abcde"f 相反,如果magic_quotes_gpc=Off; 那么字符中要带有引号(不管单引号还是双引号) ,直接写入mysql都会直接变成空白 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页面中如果不希望出现以下情况: 总结如下: 1. 对于magic_quotes_gpc=on的情况, 我们可以不对输入和输出数据库的字符串数据作 如果此时你对输入的数据作了addslashes()处理, 2. 对于magic_quotes_gpc=off 的情况 必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出 |