0

0

php中特殊字符用html代码好还是转义好?

php中文网

php中文网

发布时间:2016-06-06 20:47:42

|

1320人浏览过

|

来源于php中文网

原创

嗯,因为是纯小白,这个问题可能有点菜,各位大神见谅……
就是在写php时,需要echo特殊字符,比如"这个符号,写入php时是用转义\"好还是用html代码"好呢?
请教各位,谢谢!

谢谢各位!已经大致明白了,非常感谢各位的耐心解答!
PS.php大神果然不一样,回答都是那么的详细~~在此感谢了!

回复内容:

嗯,因为是纯小白,这个问题可能有点菜,各位大神见谅……
就是在写php时,需要echo特殊字符,比如"这个符号,写入php时是用转义\"好还是用html代码"好呢?
请教各位,谢谢!

谢谢各位!已经大致明白了,非常感谢各位的耐心解答!
PS.php大神果然不一样,回答都是那么的详细~~在此感谢了!

要明白哪个好的话首先我们就要搞清楚两者之间的区别:

  • 使用转义的话就是相当于输出原字符,既然特殊字符原字符输出了的话就必须和页面的编码方式和浏览器的编码方式有关系。如果页面的编码(如GBK)中不包含该特殊字符的话,或者浏览器的编码方式不包含该特殊字符的话,就会出现乱码。

  • 你所说的HTML代码的正统名字叫做HTML 字符实体,英文名字叫做HTML Entities。使用字符实体的话浏览器会自己将代码转换为正确的字符,就少了对编码方式的要求。关于字符实体的内容你可以多看看这些页面:HTML 字符实体 | HTML Entities

总结来说,使用转义的话方便书写和阅读,但是对页面的编码方式有要求。使用HTML字符实体虽然少了编码方式的显示,但是不便于书写和阅读源码。所以我个人的建议是例如"这种稍微大众平常一点的字符还是转义输出比较好,而特殊的,可以独立于页面的特殊字符(如 © ® ™ 等)则使用字符实体的形式表现。字符实体这块虽然使用实体号来写会有更大的兼容性,但是个人倾向于用字符实体的名称,原因还是方便阅读。

转义和转义不一样

感性的来看,但凡在字符串本身当中,出现包裹字符串的分隔符(或其他直接使用有特殊意义的字符),都必须转义。但是不同的语言的转义,虽然目的一致,但要转的东西往往完全不同。

立即学习PHP免费学习笔记(深入)”;

“转义\"好还是用html代码"好”?前者是PHP字符串的转义,后者是HTML语言的转义。使用场合都不同,所以千万不要混为一谈——完全不是等价讨论的概念。

题主问题中,前者使用的PHP字符串转义,就是双引号包裹的字符串当中,允许转义\"="\n=LF(0x0A)等字符。后者涉及的HTML转义就是用HTML实体(HTML Entities)表示字符,比如&=&

什么转义都不能省略

PHP的转义不能省略,不用多说(多数时候,不转义明显解析出错啊!)

但这里的问题是:PHP = Hypertext Preprocessor,PHP的输出就是HTML页面。在PHP中写的字符串常量,经常送给浏览器的HTML解析器。题主问的问题也是如此。

所以必须明确:题主的需求很可能涉及二次转义:先写出合法的PHP字符串常量,然后保证浏览器解析HTML后,输出的仍然是字符串的原样,而不会:

  • 特殊字符失效
  • 破坏HTML DOM结构
  • 被注入代码,产生安全问题

PHP和HTML,两个的转义都是不能省略的。题主问题的结论是:前者只做了PHP的转义,这个放在HTML正文中可以,但放在标签的属性值里不行。后者是做了HTML的转义,而PHP无需转义(视同已转义),OK。但重要的是:要知道“为什么”可以,而不是乱试最后“凑巧”可以。

我赞成的做法

虽然第二种可以,但我认为echo '"';这绝对是一种极其不良的实践。如果评一个“PHP最差编程习惯”,这个绝对有上榜的实力。

橙篇
橙篇

百度文库发布的一款综合性AI创作工具

下载

因为PHP先构造字符串,再处理成HTML的格式输出,这是一个有先后顺序的需求。如果直接把HTML实体写在PHP的字符串常量里,那就是把两个阶段转义的逻辑混杂在了一起。

在PHP中我比较赞成的方法,是将字符串的内容保持原样,在输出之前用htmlentitieshtmlspecialchars函数包裹之:(注意这两个函数略有区别,网上资料很多)

header("Content-Type: text/html; charset=utf-8");
echo htmlentities("\"M&M\""); # 显示:"M&M" 查看源代码:"M&M"

这样,写源代码的时候只需关心PHP的逻辑。最后由机器保证前台的输出,和字符串本身一致。

你可能总会在网上见到莫名其妙的真的出现一个“&”的情况——这就是不单点转义,而是把转义过程自以为是的到处乱放,最终造成重复做两遍HTML转义的错误。

数据可能到处输出,但数据的原样只有一个。不要把数据的原貌混杂到自己都认不清,这也很重要。

如何对付特殊符号?

对付©®™等特殊符号,以及中文等涉及编码方式的地方,我和 @怡红公子 的看法是不太一致的。我的想法是:

  • 出现任何特殊符号,都真的原样写到字符串中去。中文也一样。
  • 转义仍然使用htmlentities来做。
  • PHP文件尽可能使用UTF-8无BOM格式存储。
  • 如果输出的编码不是UTF-8,则在HTML转义的后边,再加一层iconv转换。

因为我认为转义和编码方式还是一个事情的两个阶段,不宜混在一起谈。这个模型就像俄罗斯套娃一样,安装者一定是先装小的再套大的,而拆解者必然是先拆外边再拆里边。以GBK为例的逻辑就是:

  1. 先有原数据。——©公司"2014"
  2. 做成PHP的字符串常量。——"©公司\"2014\"" 以这个样子写进PHP脚本文件中
  3. 转义HTML实体。——©公司"2014" 此处PHP知道:字符串中有这些字符,这就行了,内部应该是Unicode存的但是我们可以不关心
  4. 转成GBK编码。——©+B9ABCBBE+"2014"中间的一段是4个字节的GBK码原始值
  5. 浏览器解开GBK编码:——©公司"2014"
  6. 再解开HTML实体————©公司"2014"
  7. 原样输出。

去掉编码,无非就是去掉了步骤4和5,和转义一点关系都不涉及到。

輸出HTML的東西都必須轉義(空格-> )。

永遠不要相信一切輸入。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号