鱼C论坛

 找回密码
 立即注册
查看: 3169|回复: 0

[PHP API档案] htmlentities && htmlspecialchars

[复制链接]
发表于 2014-9-14 09:17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 大麦田 于 2014-9-14 14:30 编辑

转换字符为HTML字符编码

函数原型:
string htmlentities           ( string $string  [, int $flags  = ENT_COMPAT | ENT_HTML401  [, string $encoding  = ini_get("default_charset")  [, bool $double_encode  = true  ]]] )
string htmlspecialchars   ( string $string  [, int $flags  = ENT_COMPAT | ENT_HTML401  [, string $encoding  = ini_get("default_charset")  [, bool $double_encode  = true  ]]] )

函数功能:
htmlentities         : 转换所有字符为HTML字符编码。
htmlspecialchars : 转换特殊字符为HTML字符编码。
函数参数:

参数 含义
$string 需要转换的字符
$flags 转换模式 (默认:ENT_COMPAT | ENT_HTML401)
ENT_COMPAT     :对双引号进行编码,不对单引号进行编码
ENT_QUOTES      :单引号和双引号都进行编码
ENT_NOQUOTES:不对单引号和双引号进行编码
$encoding 默认编码 UTF8 (php>5.4)
ISO-8895-1      西欧,Latin-1
GB2312 (936)   简体中文,中国国家标准字符集。
UTF8                 与ASCII 兼容的多字节 8 位 Unicode(多语言项目常用)
BIG5 (950)        繁体中文,主要用于中国台湾省。 (喜欢称他:大5码)


函数实例:

<?php
//演示一个连接到鱼C论坛的html代码
$fishc_href = "<a href='http://bbs.fishc.com/'>链接到鱼C论坛首页</a>";

echo "htmlentities:<br />";

$ret_default = htmlentities($fishc_href); //等同于$ret_default = htmlentities($fishc_href, ENT_COMPAT | ENT_HTML401, 'utf-8');
echo "<xmp>实际代码:" . $ret_default . "</xmp>";
echo "网页显示:" . $ret_default . "<br />";

$ret_quote = htmlentities($fishc_href, ENT_QUOTES);
echo "<xmp>实际代码:" . $ret_quote . "</xmp>";
echo "网页显示:" . $ret_quote . "<br /><br />";

//htmlspecialchars用法同上
$ret_default_char = htmlspecialchars($fishc_href);
$ret_quote_char = htmlspecialchars($fishc_href, ENT_QUOTES);
?>

进阶:
<?php
//如何用php代码,将鱼C论坛首页,以html代码形式,直接显示在屏幕上呢?

//向浏览器声明本文件编码utf-8
header('Content-Type: text/html; charset=utf-8');

$fishc_html = file_get_contents("http://bbs.fishc.com/");
echo htmlspecialchars($fishc_html);
//然后什么都没有了, Tell me why ???

//原因是“鱼C论坛”用的是GBK,而坑爹的转换竟然只有gb2312,不支持gbk
//然后就木有然后了...

//接下来,我们将得到的内容,从gbk编码,转换到utf-8编码,最后再将标签,转化成html可显示代码,显出出来。
//这个就是大家后台编辑是,插入代码后,网页上看到的仍旧是“代码”的原因。
$fishc_html_utf8 = mb_convert_encoding($fishc_html, "UTF-8", "GBK");
echo htmlspecialchars($fishc_html_utf8);
?>

函数注意:

1. 不支持gbk编码,用的时候,一定要注意。
2. 关于php手册中提到编码区别:
htmlentities()                 所有字符转换为 HTML 编码。
htmlspecialchars()         仅将预定义的字符转换为 HTML 编码。
预定义字符:
和号    (&) 成为 &
双引号 (")  成为 "
单引号 (' )  成为 '
小于    (<) 成为 <
大于    (>) 成为 >
这样导致的结果:
2.1. 编码英文的时候,结果一致
2.2. 编码中文的时候,htmlentities() 会对中文本身也编码,导致显示出来成为乱码

php 5.5下测试结果:
得到的编码结果一致,所以一并列出。供大家做参考。


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表