htmlspecialchars
(PHP 4, PHP 5, PHP 7)
htmlspecialchars - 将特殊字符转换为HTML实体
描述
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
某些字符在HTML中有特殊意义,如果要保留它们的含义,应该用HTML实体表示。该函数返回一个包含这些转换的字符串。如果您需要所有具有关联命名实体的输入子字符串进行翻译,请改用htmlentities()。
如果传递给此函数的输入字符串和最终文档共享相同的字符集,则此函数足以准备输入以包含在HTML文档的大多数上下文中。但是,如果输入可以表示未在最终文档字符集中编码的字符,并且您希望保留这些字符(作为数字或命名实体),则此函数和htmlentities()(仅编码具有命名实体的子字符串等同)可能不足。您可能必须改用mb_encode_numericentity()。
字符 | 替代 |
---|---|
&(&符号) | & |
“(双引号) | “,除非设置了ENT_NOQUOTES |
'(单引号) | '(对于ENT_HTML401)或'(对于ENT_XML1,ENT_XHTML或ENT_HTML5),但仅当设置了ENT_QUOTES时 |
<(小于) | < |
(好于) | > |
参数
string
正在转换的字符串。
flags
一个或多个以下标志的位掩码,指定如何处理引号,无效的代码单元序列和使用的文档类型。缺省值是ENT_COMPAT | ENT_HTML401。
常数名称 | 描述 |
---|---|
ENT_COMPAT | 将转换双引号并单独留下单引号。 |
ENT_QUOTES | 将转换双引号和单引号。 |
ENT_NOQUOTES | 将留下双重和单引号未转换。 |
ENT_IGNORE | 无声地丢弃无效的代码单元序列,而不是返回空字符串。不鼓励使用这个标志,因为它可能有安全隐患。 |
ENT_SUBSTITUTE | 用Unicode替换字符U + FFFD(UTF-8)或 (否则)替换无效的代码单元序列,而不是返回空字符串。 |
ENT_DISALLOWED | 用Unicode替换字符U + FFFD(UTF-8)或 (否则)替换给定文档类型的无效代码点,而不是保持原样。例如,这可能对确保具有嵌入式外部内容的XML文档格式良好有用。 |
ENT_HTML401 | 将代码作为HTML 4.01处理。 |
ENT_XML1 | 将代码作为XML处理1。 |
ENT_XHTML | 将代码作为XHTML处理。 |
ENT_HTML5 | 将代码处理为HTML 5。 |
encoding
定义转换字符时使用的编码的可选参数。
如果省略,则默认值encoding
取决于正在使用的PHP版本。在PHP 5.6和更高版本中,default_charset配置选项用作默认值。PHP 5.4和5.5将使用UTF-8作为默认值。早期版本的PHP使用ISO-8859-1。
虽然这个参数在技术上是可选的,但是如果您使用PHP 5.5或更早版本,或者您的default_charset配置选项可能被错误地设置为给定输入,那么强烈建议您为代码指定正确的值。
对于此功能,编码ISO-8859-1,ISO-8859-15,UTF-8,cp866,cp1251,cp1252和KOI8-R实际上是等同的,只要其string
本身对编码有效,受到htmlspecialchars()影响的字符在所有这些编码中占据相同的位置。
支持以下字符集:
字符集 | 别名 | 描述 |
---|---|---|
ISO-8859-1 | ISO8859-1 | 西欧,拉丁-1。 |
ISO-8859-5 | ISO8859-5 | 很少使用西里尔文字符(拉丁文/西里尔文)。 |
ISO-8859-15 | ISO8859-15 | 西欧,拉丁9。添加拉丁文-1(ISO-8859-1)中缺少的欧元符号,法文和芬兰文字母。 |
UTF-8 | | ASCII兼容的多字节8位Unicode。 |
CP866 | ibm866,866 | DOS特定的西里尔文字符集。 |
CP1251 | Windows-1251,win-1251,1251 | 特定于Windows的西里尔文字符集。 |
CP1252 | Windows-1252,1252 | 西欧的Windows特定字符集。 |
KOI8-R | koi 8 - ru,koi 8 r | 俄语。 |
BIG5 | 950 | 繁体中文,主要用于台湾。 |
GB2312 | 936 | 简体中文,国家标准字符集。 |
BIG5-HKSCS | | Big5与香港扩展,繁体中文。 |
SHIFT_JIS | SJIS,SJIS-win,cp932,932 | 日语 |
EUC-JP | EUCJP,eucJP-win | 日语 |
的MacRoman | | Mac OS使用的字符集。 |
'' | | 一个空字符串按此顺序激活脚本编码(Zend多字节),default_charset和当前语言环境(请参阅nl_langinfo()和setlocale())的检测。不建议。 |
注意:任何其他字符集都不被识别。将使用默认编码,并发出警告。
double_encode
当关闭double_encode时,PHP将不编码现有的html实体,默认情况下是转换所有内容。
返回值
转换后的字符串。
如果输入字符串在给定编码中包含无效的代码单元序列,则将返回一个空字符串,除非设置了ENT_IGNORE或ENT_SUBSTITUTE标志。
更新日志
版 | 描述 |
---|---|
5.6.0 | 编码参数的默认值已更改为default_charset配置选项的值。 |
5.4.0 | 编码参数的默认值已更改为UTF-8。 |
5.4.0 | 添加了常量ENT_SUBSTITUTE,ENT_DISALLOWED,ENT_HTML401,ENT_XML1,ENT_XHTML和ENT_HTML5。 |
5.3.0 | 常量ENT_IGNORE被添加。 |
5.2.3 | double_encode参数被添加。 |
例子
示例#1 htmlspecialchars()示例
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
注意
注意:请注意,此功能不会转换超出上面列出的任何内容。有关完整的实体转换,请参阅htmlentities()。
注意:
如果标志值不明确,则适用以下规则:
- 当ENT_COMPAT,ENT_QUOTES和ENT_NOQUOTES均不存在时,缺省值为ENT_COMPAT。
- 当存在多于一个ENT_COMPAT,ENT_QUOTES和ENT_NOQUOTES时,ENT_QUOTES采用最高优先级,然后是ENT_COMPAT。
- 当不存在ENT_HTML401,ENT_HTML5,ENT_XHTML和ENT_XML1时,默认值为ENT_HTML401。
- 当存在多于一个ENT_HTML401,ENT_HTML5,ENT_XHTML和ENT_XML1时,ENT_HTML5的优先级最高,其次是ENT_XHTML,ENT_HTML401。
- 当存在多于一个ENT_DISALLOWED,ENT_IGNORE和ENT_SUBSTITUTE时,ENT_IGNORE的优先级最高,其次是ENT_SUBSTITUTE。
扩展内容
- get_html_translation_table() - 返回htmlspecialchars和htmlentities使用的转换表
- htmlspecialchars_decode() - 将特殊的HTML实体转换回字符
- strip_tags() - 从字符串中去除HTML和PHP标签
- htmlentities() - 将所有适用的字符转换为HTML实体
- nl2br() - 在字符串中的所有换行符之前插入HTML换行符
← htmlspecialchars_decode
implode →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com