匯東網


php 特殊字符转义指南(函数用法、注意事项)

[編輯] [转简体]
|
作者:huidong | 分類:【編程】php
[ 25 瀏覽 0 評論 6 贊 7 踩 ]

概要

正文

php 的转义函数有好多。


php 常用转义函数

列举:


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

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

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

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


这只是其中的一部分。


区别


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

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

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


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


表单提交到 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 语句时

使用 mysqli_real_escape_string 

[ 6] [ 7]


 評論區  0 條評論

+ 添加評論