5.11 处理含有HTML标记的字符串
使用PHP进行Web页面开发,经常会遇到处理HTML标记的问题。PHP提供的函数htmlentities()完成对字符串中HTML标记的处理,该函数可将字符串中有关字符转换成HTML实体,即HTML字符编码。该函数的语法如下所示。
string htmlentities(string$str);
函数htmlentities()将字符串$str中的HTML标记(如<、>等)转换成相关编码的形式。代码5-16演示了该函数的用法。
代码5-16 使用函数htmlentities()处理字符串中的HTML标记5-16.php
01 <?php
02 $str="<b>I love PHP!</b>";
03 $str_entity=htmlentities($str);//处理字符串中的HTML标记
04
05 echo"转换前:$str";
06 echo"<br/>";
07 echo"<br/>";
08
09 echo"转换后:$str_entity";
10 ?>
【代码解析】如果读者还不知道HTML标签的意义,请返回第1章查看。<b>表示将字符串加粗显示。如果不转化成HTML编码形式,字符串会原样输出文字。这段程序的执行结果如图5-16所示。
从执行结果可以看出,转换前,浏览器将字符串"<b>I love PHP!</b>"做解析,然后将其以粗体文字的形式显示到浏览器上;而转换后,HTML标记被原样显示到浏览器上。事实上,转换后,字符串变成了"<b>I love PHP!</b>",这时浏览器将其解析为<b>I love PHP</b>并且输出到浏览器端。通过查看该页面的源代码,可以更清楚地了解这一点。5-16.php执行后的页面源代码如下所示。其中字符<转换成HTML实体<,字符>转换成HTML实体>。HTML实体通常以&开头,以;结束。
转换前:<b>I love PHP!</b><br/>转换后:<b>I love PHP!</b>
还有一个和函数htmlentities()功能类似的函数:htmlspecialchars(),该函数可以将特殊符号转换成HTML实体。它主要转换的特殊符号有如下几个。
❑&:转换成&。
❑"(双引号):转换成"。
❑<(小于号):转换成<
❑>(大于号):转换成>
函数htmlspecialchars()的用法和函数htmlentities()类似,这里不再赘述。
PHP还提供了将HTML实体转换成相关字符的函数:html_entity_decode()。该函数的语法如下所示。
string html_entity_decode(string$str);
该函数将字符串$str中的HTML实体转换成相关的字符,它可以看做是函数htmlentities()的逆运算。代码5-17演示了该函数的用法。
代码5-17 使用函数html_entity_decode()将HTML实体转换成相关字符5-17.php
01 <?php
02 $str="<a href='http://www.php.net'>PHP language website</a>";
03
04 $str_entity=htmlspecialchars($str);
05 $str_html=html_entity_decode($str_entity);//将HTML实体转换成字符
06
07 echo"调用函数htmlspecialchars后:";
08 echo"<br/>";
09 echo$str_entity;
10
11 echo"<br/>";
12 echo"<br/>";
13
14 echo"调用函数html_entity_decode后:";
15 echo"<br/>";
16 echo$str_html;
17 ?>
【代码解析】第2行定义的变量中包含了<a>标签,这是一个链接标签。第4行先去掉变量中的特殊字符,然后第5行使用html_entity_decode()转换HTML实体。这段代码的执行结果如图5-17所示。