PHPphp 单引号 双引号的使用问题

--一步,二步,三步,N步,二行脚印
张映 发表于
分类目录:
标签:, , ,
今天遇到比较怪异的问题,单引号无法解释\n,看下面的例子
$test = file_get_contents('test.txt');
$array = explode('\r\n',$test);
var_dump($array);
array(1) { [0]=& string(30) "222 444" }
上面的回车根分割行,根本不起作用。
$test = file_get_contents('test.txt');
$array = explode("\r\n",$test);
var_dump($array);
结果如下:
array(4) { [0]=& string(6) "111111" [1]=& string(6) "222222" [2]=& string(6) "333333" [3]=& string(6) "444444" }
换成双引号,\r\n就能解释。
var_dump("\n");
结果如下:
string(1) " "
\n从表面上看,应当是二个字符才对,但是显示却是一个字符。
var_dump('\n');
结果如下:
string(2) "\n"
现在是2个字符串。
为什么会这样呢,\n也不是变量啊,单引号不解悉,双引号解悉。感觉很怪异,\n对应的assic表是13,难道就是因为这个把\n当变量了?
转载请注明作者:海底苍鹰地址:2672人阅读
1.javascript跟sql语句中,单引号需加反斜线转义\',不然会报错。
在数据库中存贮的是原本的文字,但是插入时需加\,读取并由js使用时亦需加\转义。
PHP解决方式:
插入数据库时,使用AddSlashes函数转义单双引号,存入数据库的数据不变
读取通过js使用时,AddSlashes就可以
显示在html时候,htmlspecialchars($str,ENT_QUOTES)函数显示在html上面(用Kindeditor的时候,存入数据库的已经是转义之后的数据,所以这一步都省掉了)
2.在html中显示各种特殊字符时,通过如下方式保证完整性及安全性:
PHP:htmlspecialchars()
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 && (双引号) 成为 &' (单引号) 成为 '& (小于) 成为 && (大于) 成为 &
htmlspecialchars(string,quotestyle,character-set)
必需。规定要转换的字符串。
quotestyle
可选。规定如何编码单引号和双引号。
ENT_COMPAT - 默认。仅编码双引号。ENT_QUOTES - 编码双引号和单引号。ENT_NOQUOTES - 不编码任何引号。
character-set
可选。字符串值,规定要使用的字符集。
ISO-8859-1 - 默认。西欧。ISO-8859-15 - 西欧(增加 Euro 符号以及法语、芬兰语字母)。UTF-8 - ASCII 兼容多字节 8 比特 Unicodecp866 - DOS 专用 Cyrillic 字符集cp1251 - Windows 专用 Cyrillic 字符集cp1252 - Windows 专用西欧字符集KOI8-R - 俄语GB2312 - 简体中文,国家标准字符集BIG5 - 繁体中文BIG5-HKSCS - Big5 香港扩展Shift_JIS - 日语EUC-JP - 日语
PHP 单双引号与HTML转义的那些事
一、单引号和双引号转义在PHP的数据存储过程中用得比较多,即往数据库里面存储数据时候需要注意转义单、双引号;
先说几个PHP函数:
1、addslashes&—&使用反斜线引用(转义)字符串;
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(‘)、双引号(“)、反斜线(\)与 NUL(NULL&字符)。
一个使用&addslashes()&的例子是当你要往数据库中输入数据时。例如,将名字&O’reilly&插入到数据库中,这就需要对其进行转义。大多数据库使用&\&作为转义符:O\’reilly。这样可以将数据放入数据库中,而不会插入额外的&\。当 PHP 指令magic_quotes_sybase&被设置成&on&时,意味着插入&‘&时将使用&‘&进行转义。默认情况下,PHP
指令magic_quotes_gpc&为&on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行&addslashes()。不要对已经被magic_quotes_gpc&转义过的字符串使用&addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc()&进行检测。
2、stripslashes&— 去掉字符串的反斜杠引用(转义)
即同addslashes()做相反的工作;
3、get_magic_quotes_gpc — 检测魔术引用变量是否开启,倘若开启返回1,为开启则返回0;
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
$lastname = $_POST['lastname' ];
$sql = “INSERT INTO lastnames (lastname) VALUES (‘$lastname’)”;
二、谈转义实体问题:
我们经常会遇到关于留言板之类的可以让用户输入信息的地方,这些地方都是需要注意的,因为不做转实体之类的话,html代码、script脚本可以轻易的被输入保存,并被其他用户执行;
所以类似用户在输入文本内输入&a href=”xxx”&hello&/a&之类的,我们尽量要屏蔽掉,否则用户会乱搞,比如调CSS样式等,那样,我们页面将一塌糊涂。废话不多说,这里有几个关于PHP转实体的函数需要详细了解:
1、htmlspecialchars() 转义特别的字符为HTML实体;
‘&’ (ampersand) becomes ‘&’‘”‘ (double quote) becomes ‘&’ when&ENT_NOQUOTES&is not set.”’ (single quote) becomes ‘'’ only when&ENT_QUOTES&is set.‘&’ (less than) becomes ‘&’‘&’ (greater than) becomes ‘&’
2、htmlspecialchars_decode()将实体转成HTML代码,函数1的反函数
3、 htmlentities()这个是全部转换html实体,和htmlspecialchars()区别在于,这个函数是转义全部的字符,而htmlspecialchars()仅仅转义上面限定的5个特殊字符!
三。html js中单引号,双引号及其转义引用
在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下:
&input value=&Test& type=&button& onclick=&alert(&&OK&&);& /&
IE提示出错后,再漫不经心地改为:
&input value=&Test& type=&button& onclick=&alert(\&OK\&);& /&
结果还是出错。
这时,我就想不通了,虽然我知道最直接的解决方法是写成这样:
&input value=&& type=&button& onclick=&alert('OK');& /&
但为什么javascript中的转义字符\没有效果了呢?
后来找到一段正常的代码:
&input value=&Test& type=&button& onclick=&alert(&OK&);& /&
这时才理解,原来这时,还是归于HTML的管辖范围,所以转义字符应该使用HTML的,而不是javascript的。两个双引号的做法是vbScript的,\&这种做法则是javascript的,而HTML的,则是用&,此外还可以使用:&、&#x27。
下面列出各种表达方法:
&input value=&外双引号内双引号-错误& type=&button& onclick=&alert(&OK&);& /&&br /&
&input value=&外单引号内单引号-错误& type=&button& onclick='alert('OK');' /&&br /&
&input value=&两个双引号-错误& type=&button& onclick=&alert(&&OK&&);& /&&br /&
&input value=&两个单引号-错误& type=&button& onclick=&alert(''OK'');& /&&br /&
&input value=&\+双引号-错误& type=&button& onclick=&alert(\&OK\&);& /&&br /&
&input value=&\+单引号-错误& type=&button& onclick=&alert(\'OK\');& /&&br /&
&input value=&外双引号内单引号-OK& type=&button& onclick=&alert('OK');& /&&br /&
&input value=&外单引号内双引号-OK& type=&button& onclick='alert(&OK&);' /&&br /&
&input value=&外部不使用引号-OK& type=&button& onclick=alert('OK');alert(&OK&); /&&br /&
&input value=&HTML转义字符&(& # 3 4 ;)-OK& type=&button& onclick=&alert(&OK&);& /&&br /&
&input value=&HTML转义字符'(& # 3 9 ;)-OK& type=&button& onclick=&alert('OK');& /&&br /&
&input value=&HTML转义字符&(& # x 2 2 ;)-OK& type=&button& onclick=&alert('OK');& /&&br /&
&input value=&HTML转义字符'(& # x 2 7 ;)-OK& type=&button& onclick=&alert('OK');& /&&br /&
&input value=&HTML转义字符&(&)-OK& type=&button& onclick=&alert(&OK&);& /&&br /&
&input value=&HTML转义字符&(&)-IE错误& type=&button& onclick=&alert(&OK&);& /&&br /&
&input value=&其它\\-错误& type=&button& onclick=&alert(\\&OK\\&);& /&&br /&
&input value=&其它\& # 3 4 ;-错误& type=&button& onclick=&alert(\&OK\&);& /&&br /&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:204601次
积分:3033
积分:3033
排名:第9366名
原创:99篇
转载:125篇
(1)(1)(1)(3)(1)(5)(12)(9)(7)(18)(14)(28)(19)(20)(12)(39)(17)(17)PHP 错误之引号中使用变量
字体:[ ] 类型:转载 时间:
当看到错误提示
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
当看到错误提示 syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING 这个提示,是提示变量使用的问题。 而我出现的是,语句中使用了数组,导致失败。下面看看失败的代码; &?php echo "我是数组,$n['x']"; ?& 这样即时双引号是可以解析变量的,但是素组这样的,写法是没办法解析。修改成下面就可以了! &?php echo "我是数组,{$n['x']}"; ?& 加上花括号{}可以让语句识别这里面是动态的。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具关于多重引号的问题!谢谢!_Php问答1_PHP技术问答_最全面的网站教程
当前位置:&&&&&&关于多重引号的问题!谢谢!
关于多重引号的问题!谢谢!
多重引号的问题!我想用 echo动态生成表格,但是引号里有引号,然后引号里面还有引号,这样多重引号如何做呢?
如这样会报错
&td onmouseover='this.style.backgroundColor='#006699'' onmouseout='this.style.backgroundColor='#220099''&jdfkdjjjjjjjjj&/td&
______________________________________________________________________________________________
&td onmouseover=\"this.style.backgroundColor='#006699'\" onmouseout=\"this.style.backgroundColor='#220099'\"&jdfkdjjjjjjjjj&/td&
______________________________________________________________________________________________
在PHP模式下"改成\"
______________________________________________________________________________________________
所以php有&&&算符
echo &&& HTML
&td onmouseover="this.style.backgroundColor='#006699'" onmouseout="this.style.backgroundColor='#220099'"&jdfkdjjjjjjjjj&/td&
______________________________________________________________________________________________
同意楼上的
______________________________________________________________________________________________
print也可。
上一篇:下一篇:

我要回帖

更多关于 php引号转义 的文章

 

随机推荐