网络编程 
首页 > 网络编程 > 浏览文章

PHP字符转义相关函数小结(php下的转义字符串)

(编辑:jimmy 日期: 2024/11/19 浏览:3 次 )
文章中有不正确的或者说辞不清的地方,麻烦大家指出了~~~

与PHP字符串转义相关的配置和函数如下:
1.magic_quotes_runtime
2.magic_quotes_gpc
3.addslashes()和stripslashes()
4.mysql_escape_string()
5.addcslashes()和stripcslashes()
6.htmlentities() 和html_entity_decode()
7.htmlspecialchars()和htmlspecialchars_decode()

当magic_quotes_runtime打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线。
可以使用set_magic_quotes_runtime()与get_magic_quotes_runtime()")、反斜线(\)与 NUL(NULL 字符)。
以上是W3SCHOOL.COM.CN给出的解释俺一直觉的不是很准确
因为在magic_quotes_sybase=on时它将单引号(')转换成双引号(") 在magic_quotes_sybase=off时才将单引号(')转换成(\')
stripslashes()函数的功能与addslashes()")、( \x1a)

addcslashes()" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
"codetitle">复制代码 代码如下:
if(phpversion() < '5.3.0') {
set_magic_quotes_runtime(0);
}

"codetitle">复制代码 代码如下:
if(!get_magic_quotes_gpc()) {
$_GET = daddslashes($_GET);
$_POST = daddslashes($_POST);
$_COOKIE = daddslashes($_COOKIE);
$_FILES = daddslashes($_FILES);
}
function daddslashes($string, $force = 1) {
if(is_array($string)) {
foreach($string as $key => $val) {
unset($string[$key]);
$string[addslashes($key)] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
return $string;
}

" 双引号 
    \[0-7]{1,3}               此正则表达式序列匹配一个用八进制符号表示的字符  
    \x[0-9A-Fa-f]{1,2}  此正则表达式序列匹配一个用十六进制符号表示的字符  

举几个例子:

一个包含\0特殊字符的例子:

$str = "ffff\0ffff";
echo(strlen($str));
echo("\n");
for($i=0;$i<strlen($str);$i++)echo("\t".ord($str{$i}));
echo("\n");

输出结果:
----------------------

9
        102     102     102     102     0       102     102     102     102

替换特殊字符的例子

$str = "ffff\0ffff";
$str = str_replace("\x0", "", $str);  
//或者用$str = str_replace("\0", "", $str); 
//或者用$str = str_replace(chr(0), "", $str); 
echo(strlen($str));
echo("\n");
for($i=0;$i<strlen($str);$i++)echo("\t".ord($str{$i}));
echo("\n");
输出结果:
----------------------
8
        102     102     102     102     102     102     102     102


八进制ascii码例子:

//注意,符合正则\[0-7]{1,3}的字符串,表示一个八进制的ascii码。
$str = "\0\01\02\3\7\10\011\08\8";  //这里的\8不符合要求,被修正为"\\8" (ascii为92和56)
echo(strlen($str));
echo("\n");
for($i=0;$i<strlen($str);$i++)echo("\t".ord($str{$i}));
echo("\n");
输出结果:
----------------------
11
        0       1       2       3       7       8       9       0       56      92      56

十六进制ascii码例子:

$str = "\x0\x1\x2\x3\x7\x8\x9\x10\x11\xff";
echo(strlen($str));
echo("\n");
for($i=0;$i<strlen($str);$i++)echo("\t".ord($str{$i}));
echo("\n");
输出结果:
----------------------
10
        0       1       2       3       7       8       9       16      17      255
上一篇:PHP 中英文混合排版中处理字符串常用的函数
下一篇:如何提高MYSQL数据库的查询统计速度 select 索引应用
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?