AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案
AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案
以下代码为asp.net环境下,c#语言编写的解决方案.
数据用Dictionary,而不是用其他的例如ArrayList存放,是为了速度.
将Dictionary替换为HashTable也是一个不错的解决方案
调用举例
String abc = //....你的某些赋值行为,这里的字符串是要处理的内容
.............
abc=Sanitizer.GetSafeHtmlFragment(abc);//被AntiXSS处理
abc=hfjString_SanitizerCompatibleWithChineseCharacters(abc);//使之汉字不出现乱码
private static System.Collections.Generic.Dictionary<string, string> hbjDictionaryFX = new System.Collections.Generic.Dictionary<string, string>();
object hbObject锁 = new object();
/// <summary>
/// 微软的AntiXSS v4.0 让部分汉字乱码,这里将乱码部分汉字转换回来
/// </summary>
/// <param name="hc输入值"></param>
/// <returns></returns>
public static String hfjString_SanitizerCompatibleWithChineseCharacters(String hcString_Para)
{
string hbString_ReturnValue = hcString_Para;
hbString_ReturnValue = hbString_ReturnValue.Replace("\r\n", "");//避免出现<br>等标签后被认为加上\r\n的换行符,这会出现在多行textbox控件中,不需要的人请注释这一行代码
if (hbString_ReturnValue.Contains("&#"))
{
//Dictionary如果没有内容就初始化内容
if (hbjDictionaryFX.Keys.Count == 0)
{
lock (hbjDictionaryFX)
{
if (hbjDictionaryFX.Keys.Count == 0)
{
hbjDictionaryFX.Clear();//防止多线程情况下的不安全情况,双重检查理论很完美,但是在多处理器,多线程下,会有平台漏洞,原因是乱序写入这一cpu或系统功能的存在
hbjDictionaryFX.Add("丼", "丼");
hbjDictionaryFX.Add("似", "似");
hbjDictionaryFX.Add("值", "值");
hbjDictionaryFX.Add("儼", "儼");
hbjDictionaryFX.Add("刼", "刼");
hbjDictionaryFX.Add("匼", "匼");
hbjDictionaryFX.Add("吼", "吼");
hbjDictionaryFX.Add("唼", "唼");
hbjDictionaryFX.Add("嘼", "嘼");
hbjDictionaryFX.Add("圼", "圼");
hbjDictionaryFX.Add("堼", "堼");
hbjDictionaryFX.Add("尼", "尼");
hbjDictionaryFX.Add("格", "格");
hbjDictionaryFX.Add("夼", "夼");
hbjDictionaryFX.Add("娼", "娼");
hbjDictionaryFX.Add("嬼", "嬼");
hbjDictionaryFX.Add("崼", "崼");
hbjDictionaryFX.Add("帼", "帼");
hbjDictionaryFX.Add("弼", "弼");
hbjDictionaryFX.Add("怼", "怼");
hbjDictionaryFX.Add("愼", "愼");
hbjDictionaryFX.Add("戼", "戼");
hbjDictionaryFX.Add("挼", "挼");
hbjDictionaryFX.Add("搼", "搼");
hbjDictionaryFX.Add("攼", "攼");
hbjDictionaryFX.Add("昼", "昼");
hbjDictionaryFX.Add("朼", "朼");
hbjDictionaryFX.Add("椼", "椼");
hbjDictionaryFX.Add("樼", "樼");
hbjDictionaryFX.Add("欼", "欼");
hbjDictionaryFX.Add("氼", "氼");
hbjDictionaryFX.Add("洼", "洼");
hbjDictionaryFX.Add("渼", "渼");
hbjDictionaryFX.Add("漼", "漼");
hbjDictionaryFX.Add("瀼", "瀼");
hbjDictionaryFX.Add("焼", "焼");
hbjDictionaryFX.Add("爼", "爼");
hbjDictionaryFX.Add("猼", "猼");
hbjDictionaryFX.Add("琼", "琼");
hbjDictionaryFX.Add("甼", "甼");
hbjDictionaryFX.Add("瘼", "瘼");
hbjDictionaryFX.Add("眼", "眼");
hbjDictionaryFX.Add("砼", "砼");
hbjDictionaryFX.Add("礼", "礼");
hbjDictionaryFX.Add("稼", "稼");
hbjDictionaryFX.Add("笼", "笼");
hbjDictionaryFX.Add("簼", "簼");
hbjDictionaryFX.Add("紼", "紼");
hbjDictionaryFX.Add("縼", "縼");
hbjDictionaryFX.Add("缼", "缼");
hbjDictionaryFX.Add("耼", "耼");
hbjDictionaryFX.Add("脼", "脼");
hbjDictionaryFX.Add("舼", "舼");
hbjDictionaryFX.Add("茼", "茼");
hbjDictionaryFX.Add("萼", "萼");
hbjDictionaryFX.Add("蔼", "蔼");
hbjDictionaryFX.Add("贼", "贼");
hbjDictionaryFX.Add("鬼", "鬼");
}
}
}
//开始替换的遍历
foreach (string key in hbjDictionaryFX.Keys)
{
if (hbString_ReturnValue.Contains(key))
{
hbString_ReturnValue = hbString_ReturnValue.Replace(key, hbjDictionaryFX[key]);
}
}
}
return hbString_ReturnValue;
}
AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案的更多相关文章
- 未能解析目标框架“.NETFramework,Version=v4.0”的 mscorlib的解决方法
本人菜鸟一个,在编码过程中遇到的问题记录下以备忘,高手别笑.最近在做一个项目,公司的VS版本是2010,家里的VS版本是2012.把公司的项目用2012打开后再用2010打开就出现 未能解析目标框架“ ...
- AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法
在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...
- django 2.0 中URL的include方法使用分析
一.问题出现: 在使用Django2.0,配置全局URL时,希望指向某个APP的URL,配置如下: from django.contrib import admin from django.conf. ...
- vue3.0中的双向数据绑定方法
熟悉vue的人都知道在vue2.x之前都是使用object.defineProperty来实现双向数据绑定的 而在vue3.0中这个方法被取代了 1. 为什么要替换Object.definePrope ...
- yii2.0中url重写实现方法
在yii框架里有前台和后台页面,举例前台url重写. 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰 ...
- kali2.0中dradis的使用方法
启动脚本位于:/usr/lib/dradis下,再该目录下有一个start.sh文件,执行后,可以在浏览器中输入https://localhost:3004即可打开dradis的web接口 切记前面h ...
- ASP.NET MVC 4.0中选择Windows 验证默认出错拒绝访问的原因和解决方案
在VS 2012或者2013 中,根据模板创建一个ASP.NET MVC 4.0的应用程序,选择下面的模板 然后选择Intranet Application 不对源代码做任何修改,直接按下F5调试,会 ...
- 在 Flash ActionScript 2.0 中调用 Javascript 方法
本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript ...
- 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!
去年10-28号,我发布了一篇文章<海王星给你好看!FineUI v4.0公测版发布暨<你找BUG我送书>活动开始>,标志着FineUI开始向4.0版本迈进.经过4个月3个公测 ...
随机推荐
- Apache开启状态查看页面(原创贴-转载请注明出处)
=================写在前面的话================== 场景描述:有时候我们需要查看apache的运行状态,只需要开启apache的status功能就可以实现,但是stat ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- ATS
一) 起因:由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求. 之前,可以在Info.plist中禁用ATS功能,按如下设置即可. <key>NSAppTran ...
- centos7 docker zookeeper
docker run --name=zookeepertmp -i -t centos7/jdk7 /bin/bash cd /home wget http://apache.fayea.com/zo ...
- 使用Spring AsyncRestTemplate对象进行异步请求调用
直接上代码: package com.mlxs.common.server.asyncrest; import org.apache.log4j.Logger; import org.springfr ...
- Jekyll教程——精心收藏
以前总想搭建一个自己的个人网站,由于不懂php后台,所以在点点网开过自己的博客,后来慢慢向程序员转变,点点网的博客已经不能满足这个职业特定的需求,于是用worldpress搭建了自己的第一个网站,鼓捣 ...
- iOS - MKMapView 地图
1.创建 MKMapView 地图 在 iOS6 或者 iOS7 中实现这个功能只需要添加地图控件.设置用户跟踪模式.在 mapView:didUpdateUserLocation: 代理方法中设置地 ...
- Nginx模块之———— RTMP模块 统计某频道在线观看流的客户数
获得订阅者人数,可以方便地显示观看流的客户数. 查看已经安装好的模块 /usr/local/nginx/sbin/nginx -V 安装从源编译Nginx和Nginx-RTMP所需的工具 sudo a ...
- position absolute 绝对定位 设置问题
今天在做布局的时候,用到了绝对定位, 父级元素相对定位,子元素两个,一个元素正常文档流布局并且在前面,另一个元素绝对定位排在后面,但设置了好久,绝对定位的子元素都不会覆盖其上面的兄弟元素,最后,不知 ...
- TC250专场
SRM 623 DIV2 1000pt 题意:给出一个最多50*50的矩阵,每个单元可能为'.'.'P'.'A','.'代表空地,你每次操作可以把一个P或者A拿到空地上,求一个最大的含有相同字符的矩形 ...