huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


php 的转义函数有好多。


PHP 常用转义函数

列举:


htmlspecialchars   单双引号、大于和小于号等转化成HTML格式

htmlentities    将所有的字符都转为HTML格式

addslashes    单双引号、反斜线及NULL加上反斜线转义

mysql_real_escape_string  转义 SQL 语句中使用的字符串中的特殊字符


这只是其中的一部分。


区别


· htmlspecialchars :可以正确转义 HTML 字符为实体字符,比如 '<' 转为 "&lt;"。

· htmlentities :转出来的结果是乱码?这我就不太熟悉了,好像要再使用 html_entity_decode() 函数解码才行,总之我没有使用。

· addslashes :可以用在执行 sql 语句前进行预处理,对特殊字符加上转义符号。

· mysql_real_escape_string :这个函数,似乎是 mysql 专门使用的字符转义函数,然而每次执行此函数我这都会出一个 Warning,而且中文乱码,不知道为什么。可以使用 mysqli_real_escape_string 代替此函数,但是需要多一个参数,就是连接数据库的返回值。如此看来,用这个函数的确比较麻烦,这个函数的功能可以使用 addslashes 函数代替。


各个函数的使用场景,以及注意事项


表单提交到 php


form 表单的 input 和 textarea 控件得到的文本内容不会转码,也就是说,用户输入什么就是什么。比如用户输入个尖括号 '<',那么就会在 php 中得到尖括号。此时如果想要将获取到的文本内容输出到 HTML 中,就需要将这些字符转码为 HTML 实体字符,使用函数 htmlspecialchars。

然而,不止如此:用户输入的换行在 php 中得到的也是 '\n',如果要正常输出,就要转为 "<br/>"

还有空格,由于在 HTML 中,多个空格只会输出一个,所以必须使用 "&nbsp;" 来正常输出一定长度的空格。在 php 中也需要将获取到的文本内容中的空格都转为 "&nbsp;"。

类似 '\n'(换行) 和 ' '(空格)这样的字符需要手动转换才能正常输出,然而,或许还有更多字符需要手动转换,暂时不知道还有些什么,等以后发现吧,再补充。或许有哪里记录了这些需要手动转换的字符?但我不知道哪里有。


php 输出 js 语句


还有,输出 js 语句的时候,常常因为 '\n' 坏事。php 变量中的 '\n' 要输出到 js 代码中,必须转为 "\\n" 再输出。原因是显而易见的,请看下面的代码:

<?php

$text = "
    hello
    world
";

echo $text;
echo "<script>alert('{$text}');</script>";

?>


上面的代码按理来说应该输出一次带有换行的 "hello world" 到页面,并且出现一个 js 的页面弹窗显示带换行的 "hello world" 吧?

其实不然。因为 $text 中的换行是 '\n',经过 echo 语句输出到页面,script 标签中的语句也发生了换行,像是这样:

alert('
    hello
    world
');

但是,js 的代码不允许这样写,字符串不能这样进行多行连接,也就是说,上面的代码会导致 js 的语法错误,导致页面不会出现弹窗。


正确的 js 代码应该是:

alert('\n    hello\n    world\n');


然而要想在 js 中输出真正的字符串 "\n" ,在 php 中就得再转义一次:

<?php

$text = "
    hello
    world
";

echo $text;

// 将 $text 中的所有 '\n' 转为 "\\n"
$text = str_replace("\n", "\\n", $text);

echo "<script>alert('{$text}');</script>";

?>


这样页面才会正常出现弹窗。


执行 sql 语句时


sql 语句的敏感字符应该只有引号,反斜杠了吧?用 addslashes 函数即可。



返回首页


Copyright (C) 2018-2024 huidong