与实体名称和实体编号关联的保留HTML字符。例如,对于角色é:实体名称:é实体编号:é同样,对于角色>:实体名称:>实体编号:>对于给定的字符串,HttpUtility.HtmlEncode返回一个HTML编码的字符串,但我想不通知道它是如何工作的。这就是我的意思:Console.WriteLine(HtmlEncode("é>"));//Outputsé>貌似é字符用的是实体编号,但是>字符用的是实体名。那么HtmlEncode方法真的适用于ISO-8859-1标准吗?如果是这样,为什么它有时会使用实体名称,有时会使用实体编号?更重要的是,我可以强制它可靠地给我实体名称吗?编辑:感谢您的回答。在执行搜索之前,我无法解码字符串。无需过多赘述,文本存储在SharePoint列表中,“搜索??”由SharePoint本身完成(使用CAML查询)。所以基本上,我不能。我正在尝试找出一种将实体编号转换为名称的方法,.NET中是否有执行此操作的函数?或者有什么其他的想法吗?这就是该方法的实现方式。对于某些已知字符,它使用相应的实体,对于所有其他字符,它使用相应的十六进制值,并且您无法修改此行为。摘自System.Net.WebUtility.HtmlEncode的实现(如反射器所示):...if(ch'){switch(ch){case'&':{output.Write("&");继续;}case''':{output.Write("'");继续;}case'"':{output.Write(""");继续;}case'':{output.Write(">");继续;}}output.Write(ch);继续;}if((ch>='x00a0')&&(ch这意味着你不应该关心,因为这个方法总是会产生高效、安全和正确编码的HTML。HtmlEncode遵循规范。ISO标准为每个实体,名称和数字都是等效的。因此,HtmlEncode的一致实现可以自由地将所有点编码为数字,或全部编码为名称,或两者兼而有之某种混合编码。我建议您从另一个方向解决问题:调用HtmlDecode在目标文本上,然后使用原始字符串搜索解码文本。ISO-8859-1与HTML字符编码并不真正相关。来自wiki维基百科:无论页面的编码如何,数字引用始终引用Unicode代码点.仅针对未定义的Unicode代码点,经常使用ISO-8859-1:Quotationsareforbiddenexceptfornewlines,tabs,andcarriagereturnsNumericreferencestopermanentlyundefinedcharactersandcontrolcharacters.即十六进制范围00-08中的字符,0B-0C,0E-1F,7F,和80-9F不能在HTML文档中使用,甚至不能在参考文献中使用,所以例如“TM”是不允许的。但是,为了与忽略此限制的早期HTML作者和浏览器向后兼容,一些浏览器将80-9F范围内的原始和数字字符引用解释为表示映射到80-9F字节中的Windows-1252编码字符。现在您的问题:为了使搜索达到最佳效果,您应该使用未编码的搜索字符串来搜索未编码的HTML(首先去除HTML标签)。匹配编码字符串会导致意想不到的结果,例如基于HTML标签或注释的命中,以及由于文本中不可见的HTML差异导致命中丢失。我做了这个函数,我认为它会有所帮助stringBasHtmlEncode(stringx){StringBuildersb=newStringBuilder();foreach(charcinx.ToCharArray())sb.Append(String.Format("{0};",Convert.ToInt16(c)));返回(sb.ToString());}我开发了下面的代码,让az、AZ和0-1不编码而是休息:以上是C#学习教程:C#HtmlEncode–ISO-8859-1EntityNamesandNumbers分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---publicstaticstringEncode(stringsource){if(string.IsNullOrEmpty(source))returnstring.Empty;varsb=newStringBuilder(source.Length);foreach(charcinsource){if(c>='a'&&c='A'&&c='0'&&c本文整理自网络,不代表立场,如涉及侵权,敬请谅解点击右侧联系管理员删除,如需转载请注明出处:
