百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[闲聊畅谈] htmlencode 实际需要替换的字符是? [复制链接]
查看:2551 | 回复:15

393

主题

2万

帖子

2万

积分

落伍热心会员

Rank: 7Rank: 7Rank: 7

贡献
1139
鲜花
543
注册时间
2001-10-4

落伍ASP落伍爱心勋章落伍草根英雄落伍手机绑定

发表于 2017-11-18 15:23:31 | 显示全部楼层 |阅读模式 来自 中国河南洛阳
为了防止潜在的脚本攻击,
我一般会将所有可能由访问者输入的文字在显示输出的时候进行一次htmlencode编码。
多年来一直这么做没感觉有什么不妥,
直到最近开始使用UTF-8编码时问题来了。

在GB编码时,汉字在ASP的server.htmlencode后还是汉字本身,
但使用UTF-8编码时,汉字会被server.htmlencode方法转义为编码,比如“阿江”就变成了“&#*****&#*****”。
这使源代码的可读性变得极差,尤其是对于大段文字来说。

现在想另写一个小函数,通过批量替换的方法,手工进行htmlencode转码,
目前仅想到需要替换的字符只有 < > & "
不知道有没有漏掉的。
或者谁指点下这样有没有什么隐患。
也许我没拿到满分,还不算是完美的人。所以我比谁都认真,努力赶上你的标准。
回复

使用道具 举报

1万

主题

25万

帖子

16万

积分

落伍者(七窍玲珑)

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献
15539
鲜花
1021
注册时间
2007-5-1

落伍草根英雄落伍热心人QQ绑定落伍者落伍手机绑定

发表于 2017-11-18 15:39:47 | 显示全部楼层 来自 中国浙江台州
回复 支持 反对

使用道具 举报

215

主题

3917

帖子

5543

积分

落伍者(三羊开泰)

Rank: 3Rank: 3

贡献
458
鲜花
47
注册时间
2007-3-29

QQ绑定落伍手机绑定

发表于 2017-11-18 16:06:13 | 显示全部楼层 来自 中国浙江杭州
空格也需要替换,还有换行符\n
没站 ,签啥名
回复 支持 反对

使用道具 举报

95

主题

1048

帖子

883

积分

落伍者(一心一意)

Rank: 1

贡献
653
鲜花
0
注册时间
2010-4-26

QQ绑定落伍手机绑定

发表于 2017-11-18 16:09:16 | 显示全部楼层 来自 中国广东东莞
看不太懂,
庭院灯-http://www.7duzm.com/
回复

使用道具 举报

843

主题

1万

帖子

8157

积分

落伍者(三羊开泰)

猛虎出山

Rank: 3Rank: 3

贡献
4010
鲜花
120
注册时间
2005-7-11

技术小组QQ绑定落伍者落伍手机绑定

发表于 2017-11-18 16:18:58 | 显示全部楼层 来自 中国广东东莞
ASP的不知道。
但在PHP,字串处理时用htmlspecialchars() 后,得到的值和你ASP的htmlencode是同样的结果,但在输出时,会有另一个函数 htmlspecialchars_decode() 得到原始值。
淘宝/天猫内部优惠券PHP+Mysql作品Demo接PHP程序定制开发QQ 83202700
回复 支持 反对

使用道具 举报

393

主题

2万

帖子

2万

积分

落伍热心会员

Rank: 7Rank: 7Rank: 7

贡献
1139
鲜花
543
注册时间
2001-10-4

落伍ASP落伍爱心勋章落伍草根英雄落伍手机绑定

 楼主| 发表于 2017-11-18 16:36:43 | 显示全部楼层 来自 中国河南洛阳
本帖最后由 阿江 于 2017-11-18 16:37 编辑
森林 发表于 2017-11-18 16:18
ASP的不知道。
但在PHP,字串处理时用htmlspecialchars() 后,得到的值和你ASP的htmlencode是同样的结果, ...


暂时不需要decode,用encode的目的是比如用户输入了
<script>
然后被我保存到了数据库里,但在我将来显示这个内容的时候实际输出到浏览器的是
&lt;script&gt;
这样就可以不用管用户输入什么都给显示出来了。
我现在只是不想让中文也一起被编码了。
也许我没拿到满分,还不算是完美的人。所以我比谁都认真,努力赶上你的标准。
回复 支持 反对

使用道具 举报

393

主题

2万

帖子

2万

积分

落伍热心会员

Rank: 7Rank: 7Rank: 7

贡献
1139
鲜花
543
注册时间
2001-10-4

落伍ASP落伍爱心勋章落伍草根英雄落伍手机绑定

 楼主| 发表于 2017-11-18 16:41:08 | 显示全部楼层 来自 中国河南洛阳
卧草泥马 发表于 2017-11-18 16:06
空格也需要替换,还有换行符\n

感谢补充,
空格和换行确实是有对应的HTML写法,
不过ASP的server.htmlencode并不处理空格和换行,
我的应用场景目前也暂时不需要处理。
也许我没拿到满分,还不算是完美的人。所以我比谁都认真,努力赶上你的标准。
回复 支持 反对

使用道具 举报

1860

主题

2万

帖子

23万

积分

落伍者(八仙过海)

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

贡献
1911
鲜花
36
注册时间
2008-5-31

落伍手机绑定落伍者

发表于 2017-11-18 17:31:03 | 显示全部楼层 来自 中国浙江宁波
阿江是个asp 专家
回复 支持 反对

使用道具 举报

792

主题

8814

帖子

1万

积分

落伍者(四季发财)

光光

Rank: 4

贡献
2101
鲜花
36
注册时间
2005-4-11

落伍者落伍手机绑定

发表于 2017-11-18 17:35:03 | 显示全部楼层 来自 中国海南海口
没看懂你想要的是什么
我只知道利用正则表达式替换掉这些内容就够了
  1. /// <summary>
  2.         /// 去除文本中的html代码。
  3.         /// </summary>
  4.         public static string RemoveHtml(string inputString)
  5.         {
  6.             return System.Text.RegularExpressions.Regex.Replace(inputString, @"<[^>]+>", "");
  7.         }
复制代码
回复 支持 反对

使用道具 举报

792

主题

8814

帖子

1万

积分

落伍者(四季发财)

光光

Rank: 4

贡献
2101
鲜花
36
注册时间
2005-4-11

落伍者落伍手机绑定

发表于 2017-11-18 17:36:11 | 显示全部楼层 来自 中国海南海口
或者这样子的,您参考一下
  1. public static string HtmlEncode(string str, bool encodeBlank = true)
  2.         {
  3.             if ((str == "") || (str == null))
  4.                 return "";

  5.             StringBuilder builder1 = new StringBuilder(str);

  6.             builder1.Replace("&", "&amp;");
  7.             builder1.Replace("<", "&lt;");
  8.             builder1.Replace(">", "&gt;");
  9.             builder1.Replace(""", "&quot;");
  10.             builder1.Replace("'", "&#39;");
  11.             builder1.Replace("\t", "&nbsp; &nbsp; ");

  12.             if (encodeBlank)
  13.                 builder1.Replace(" ", "&nbsp;");

  14.             builder1.Replace("\r", "");
  15.             builder1.Replace("\n\n", "<p><br/></p>");
  16.             builder1.Replace("\n", "<br />");
  17.             return builder1.ToString();
  18.         }
复制代码
回复 支持 反对

使用道具 举报

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

论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-11-29 06:50 , Processed in 0.069846 second(s), 32 queries , Gzip On.

返回顶部