PHP 字符串函数

htmlspecialchars()函数用于将特殊字符转换为 HTML 实体,而这些特殊字符是预定义字符。预定义字符为:

  • & (和号) 转为 &
  • " (双引号) 为 "
  • ' (单引号) 转为 '
  • < (小于) 转为 &lt;
  • > (大于) 转为 &gt;

字符串函数 htmlspecialchars_decode() 和 htmlspecialchars()函数的作用相反,是它的反函数。

htmlspecialchars_decode()函数的目的是将特殊的HTML实体转换回字符,用于解码html实体。

语法

htmlspecialchars()函数的语法如下:
String htmlspecialchars ( $string, $flags, $encoding, $double_encode );

参数

  • $string:此参数为输入字符串。
  • $flags: 标志,这些标志指定如何处理无效的代码单元序列、引号和使用的文档类型。 ENT_COMPAT | ENT_HTML401 是默认的,见下面的标志常量说明。
  • $encoding:可选参数,定义编码转换字符时使用。 encoding 的默认值因 PHP 版本而异。在 PHP 5.6 及以上版本中,default_charset 配置选项用作默认值,而PHP 5.4 和 5.5 使用 UTF-8。
  • $double_encode:当 double_encode 关闭时,PHP 无法编码现有的 HTML 实体。默认是转换所有内容。

下表中给出了可用的标志常量:
常量名称说明
ENT_IGNORE它丢弃无效的代码单元序列而不是返回一个空字符串。
ENT_QUOTES它转换单引号和双引号。
ENT_NOQUOTES它不转换任何字符串,因为它使单引号和双引号都未转换。
ENT_SUBSTITUDE用 Unicode 替换字符 U+FFFD (UTF-8) 或 &#FFFD 替换无效的代码单元序列,而不是返回空字符串.
ENT_DISALLOWED它不会保留无效的代码点,而是用 Unicode 替换字符替换给定文档类型的它们。
ENT_HTML401它将代码处理为HTML 4.01版本。
ENT_XML1它将代码处理为 XML 1。
ENT_XHTML它将代码处理为 XHTML。
ENT_HTML5将代码处理为 HTML5。

说明

有些字符在HTML 中具有特殊意义,如果需要保留其含义,则必须由HTML 实体表示。 htmlspecialchars() 函数返回一个带有这些转换的字符串。如果我们需要翻译所有关联命名实体的输入子字符串,则使用 htmlentities() 函数而不是 htmlspecialchars()。

返回值

它返回转换后的字符串,如果输入的字符串无效或包含无效的代码序列,则返回空字符串。

示例

下面给出htmlspecialchars() 函数的示例。

示例1

<?php
//htmlspecialchars()函数的字符串转换示例
$str = "This is <i>italic</i> text.";
echo htmlspecialchars($str, ENT_QUOTES); 	//将转换单引号和双引号。
?>

输出

This is &lt;i&gt;italic&lt;/i&gt; text.

示例2

<?php
$str1= "This is 'PHP' & 'Java' program.";
echo htmlspecialchars($str1, ENT_COMPAT);	//只转换双引号
echo "</br>";
echo htmlspecialchars($str1, ENT_QUOTES); 	// 转换双引号和单引号
echo "</br>";
echo htmlspecialchars($str1, ENT_NOQUOTES); //它不会转换任何引号。
?>

输出:

This is 'PHP' &amp; 'Java' program.</br>This is &#039;PHP&#039; &amp; &#039;Java&#039; program.</br>This is 'PHP' &amp; 'Java' program.

示例3

<?php
$str=  '"PHP" is much easier than "Java".'. "\n";
echo htmlspecialchars($str);	//只转双引号
echo "</br>";
echo htmlspecialchars($str, ENT_QUOTES);	//转换双引号和单引号
echo "</br>";
echo htmlspecialchars($str,  ENT_NOQUOTES);	//不会转换单引号和双引号。
echo "</br>";
?>

输出:

&quot;PHP&quot; is much easier than &quot;Java&quot;.
</br>&quot;PHP&quot; is much easier than &quot;Java&quot;.
</br>"PHP" is much easier than "Java".
</br>

htmlspecialchars() 和 htmlentities() 区别

htmlspecialchars() 和 htmlentities() 函数之间的唯一区别是 

  • htmlspecialchars() 函数转换特殊字符转换为 HTML 实体,
  • htmlentities() 函数将所有适用的字符转换为 html 实体。