其实在很多应用设计中字符串处理和数据接收都很重要,这不我在做这两个项目的时候就涉及了不少的数据接收处理及显示的问题。这里要讲一下php中POST,GET,REQUEST等接收数据时转义的问题,可能很多朋友和我以前一样不知道怎么处理,举个例子:
有一个用php输出的表单:
<?php
echo <<<BOL
<form action="" name="form1" method="POST"><imput type="text" size="20" name="username" value="{$_POST['username']}"></form>
BOL;
?>
当这样的程序运行时,你输入'"之类的字符,看看input文本框中会出现什么情况,这样做的话可以实现请求后保存值,但是在文本框中的值变成了\',而双引号之后的字符串不见了,我敢肯定这并不是你想要的结果。所以这种情况下就得了解两个知识点了,php的魔术引号及html编码转换。
1、PHP魔术引号。
在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。
PHP中有三个设置可以实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转。
PHP称之为魔术引号,这三项设置分别是
magic_quotes_gpc
影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。
magic_quotes_runtime
如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。
magic_quotes_sybase
如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。
虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。在不知道服务器ini设置的情况下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或ini_get()来检测状态。
例如:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
因此最好关闭php的魔术引号,根据情况手动用addslashes(),stripslashes()来转义和取消转义。
可以学习discuz的做法,在配置文件中加入 set_magic_quotes_runtime(0);来取消转义。
2、html编码转换
要知道html标签的属性是以'或者"号引用的,如果按照xhtml1.0的标准的话应该用双引号如
<form action="" name="form1" method="POST"><imput type="text" size="20" name="username" value="{$_POST['username']}"></form>
那么出果如果我们$_POST['username']中存在"那么就会出现html编码错误,所以我们要把字符串中的html特殊符号进行编码转换。在php中用htmlspecialchars和htmlspecialchars_decode对字符串中的html特殊字符进行转换,htmlspecialchars_decode是php5新增的。
因此要解决以上两个问题代码需要改成如下:
<?php
$_POST['username']=htmlspecialchars(get_magic_quotes_gpc()?$_POST['lastname']:addslashes($_POST['lastname']));
echo <<<BOL
<form action="" name="form1" method="POST"><imput type="text" size="20" name="username" value="{$_POST['username']}"></form>
BOL;
?>
最后在取出数据显示的时候还得加上反向函数html_entity_decode();这样才会显示出正常的格式。
相关推荐
ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为...
在VB.net中,转义双引号需要使用两个双引号表示,例如""成员 常量 等效 说明 ---------------------------------------------------------------------------CrLf vbCrLf Chr(13) + Chr(10) 回车/换行组合符。 ...
PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name);最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出。 例如: <?php $name=string; echo 字符串 . '...
### 转义表单提交字符处理函数 在Web开发中,确保用户输入的数据安全是非常重要的。不正确的处理可能会导致诸如XSS(跨站脚本攻击)等安全问题。因此,对用户提交的数据进行适当的转义是至关重要的。本文将详细介绍...
首先,我们要解决的问题是“如何防止单引号和双引号在接受页面时被转义”。PHP有一个名为`magic_quotes_gpc`的配置选项,当它开启时,PHP会自动对提交到服务器的数据进行转义,包括单引号、双引号以及反斜杠。如果你...
在双引号和单引号字符串中都可以使用反斜杠(\)进行转义。例如,如果你想在字符串中包含一个双引号,你可以写成 `\"`。单引号字符串中,反斜杠主要用于转义单引号自身,如 `\'`。 4. 复杂变量嵌套: 如果要在...
4.5 Python核心基础知识之单引号、双引号、三引号与转义字符串.mp4
MySQL数据库解析SQL时,单引号用于定义字符串常量,如果在字符串内直接出现单引号,不进行转义,就会导致解析错误。 为了解决这个问题,我们可以使用字符串的replace()函数来替换参数中的单引号。在Python中,单...
SQL语法关于&、双引号、和单引号的解释 在ASP中使用SQL时,需要了解&、双引号、和单引号的使用规则。下面将详细解释它们的意义和使用方法。 1. &连接运算符 &是连接运算符,它可以将两个字符串连接成一个字符串。...
如果中间的json string中含有单引号,这个输出就是有问题的,调用方一般是无法处理的,所以我们要对单引号进行转义。 如果是用json_encode方式生成可以用下面的方式转义: 复制代码 代码如下: $ret = json_encode($...
中将其设置为`Off`,这样可以避免自动转义带来的问题。 方法一:在`php.ini`中设置`magic_quotes_gpc = Off`,关闭此选项。然后,PHP就不会自动转义输入的引号了。 方法二:如果不能修改`php.ini`或者是在不支持该...
这里出现的问题是,Python通过JSON序列化传递到前端的数据中的双引号被自动转义,导致前端解析时出现问题。这个问题的核心在于JSON字符串的正确表示和JavaScript的安全考虑。 首先,Python在序列化数据时,`json....
为了解决ThinkPHP表单提交默认自动转义的问题,有以下两种方法: 1. 修改ThinkPHP框架内部函数: 在ThinkPHP框架的数据库驱动目录中找到 dbmysql.class.php 文件,修改 escapeString 函数。这一函数是负责转义字符...
字符串可以由单引号('')或双引号(" ")包围,但它们之间存在关键性的区别,这些差异主要体现在变量解析、转义序列处理以及多行字符串定义上。 ### 变量解析 **双引号(" ")**: 当使用双引号包围字符串时,PHP会解析...
3. **字符编码**:使用转义字符时要注意字符编码问题,确保使用的转义序列与所选字符集兼容。 4. **十六进制和八进制转义字符**:这两种转义字符可以用来表示任何 ASCII 字符。需要注意的是,当使用八进制表示法时,...
Tinyxml不能读取的字符 要转义-可以查百度文库
kindeditor特殊符号被转义 kindeditor 编辑器添加图片、flash,还有视频时路径出错
如果该函数返回1,则表示魔术引号功能已开启,这会导致所有通过表单或其他方式输入的数据在进入PHP之前被自动添加反斜杠进行转义。 魔术引号是一种在早期PHP版本中引入的安全特性,其目的是自动对特殊字符(如单...