IE 不支持单引号(')的实体名称(')

博客探讨了在全文检索模块测试中遇到的问题,即IE浏览器不支持单引号(')的HTML实体名称(')。文章提到Spring的HtmlUtils.htmlEscape()未处理单引号,而应当使用实体编号(')而非实体名称(')。该问题源于IE浏览器的兼容性,PHP htmlspecialchars函数也遵循相同策略。此外,百度搜索结果同样不支持单引号的实体名称。

最近在做全文检索模块功能的测试,发现对于特殊符号的处理还存在很大的问题。

有人说Spring本身提供了对HTML、javascript、sql语句的转码工具类,但是测试了一下发现其HtmlUtils.htmlEscape()对单引号并没做处理,只是转码了以下几个特殊字符:

  • &:&
  • " :"
  • < :&lt;
  • > :&gt;
  • 后来采用replace替换为(&apos;),IE浏览器里依然没有起到作用,只好在google里测试一下查看源代码,发现其转码成(&#39;)

    今天看到下面这篇文章才明白:

    转:http://blog.huachen.me/single-quote-ie-html-entity

    在 (x)HTML 中,一些特殊字符应该进行 HTML 实体转义。

    常见的有:&(and)、"(双引号)、'(单引号)、<(小于号)、>(大于号),这些在 (x)HTML 文档内容中应该分别转换成:&amp;&quot;&#39;&lt;&gt;

    但是问题就来了,为什么上面单引号的转义和别的特殊字符不同呢?为什么唯独单引号用的是实体编号(&#39;),而其它的用的是实体名称(&apos;)呢?

    原因就是 IE 浏览器暂时不支持单引号的实体名称,IE 浏览器暂时只支持单引号的实体编号

    这也是 PHP htmlspecialchar

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><meta content="IE=5.0000" = http-equiv="X-UA-Compatible"/> <TITLE>Trioptics Certificate</TITLE> <meta http-equiv="Content-Type" content="text/html; = charset=windows-1252"/><link href="file:///C:/Program%20Files/Trioptics%20GmbH/MTF-LAB%205/Certifica= tes/certificate.css" rel="stylesheet" type="text/css"/> <meta name="GENERATOR" content="MSHTML 11.00.9600.18538"/></HEAD> <BODY class="CBodyCert" id="IBodyCert"><!-- open certificate table = --> <TABLE align="left" class="CTableCert" id="ITableCert"><!-- Header = --> <TBODY> <TR class="CTRHeader" id="ITRCompany"> <TD class="CTDHeader" id="ITDCompany"> <DIV class="CDivHeader" id="IDivCompany">ImageMaster - Certificate</DIV></TD> <TD class="CTDHeader" id="ITDLogo"><img class="CTDHeader" = id="ITDLogo" = src="file:///C:/Program%20Files/Trioptics%20GmbH/MTF-LAB%205/Certificat= es/img/Trioptics-Logo-250x65.png"/> </TD></TR> <TR class="CTRHeader" id="ITDSlogan"> <TD class="CTDHeader" id="ITDSlogan" colspan="2"></TD></TR> <TR> <TD colspan="2"> <PRE>Company : Sunex = Operator : TH = Time/Date : 20:29:14 June 14, 2025 = Sample ID : 0 = Measure Program : 3D Tilt Corrected Through Focus = Temperature : 20°C = Measured with : <A href="http://www.trioptics.com/">TRIOPTICS</A> - = MTF-LAB - Vers. 5.13.2 = Instrument S/N : 09-113-0259 = Comments : AMT5 = </PRE></TD></TR> <TR>// 修复HTML文档使其符合XML规范: QString TriopticsParser::preprocessHtmlForXml(const QString &amp; html) { QString result = html; // 1. 修复字符集声明 result.replace("charset=\n=iso-8859-1", "charset=\"iso-8859-1\"&quot;); // 2. 转义URL中的&amp;符号 result.replace(QRegularExpression("href=\"([^\"]*?)(?<!&amp;|<|>|&amp;apos;|&quot;)&amp;([^\"]*?)\"&quot;), "href=\"\\1&amp;\\2\"&quot;); // 3. 修复自闭合标签 QStringList selfClosingTags = { "img", "br", "hr", "meta", "link" }; for (const QString&amp; tag : selfClosingTags) { // 处理有属性的标签 result.replace(QRegularExpression(QString("<%1\\b([^>]*)>&quot;).arg(tag), QRegularExpression::CaseInsensitiveOption), QString("<%1\\1/>&quot;).arg(tag)); // 处理没有属性的标签 result.replace(QRegularExpression(QString("<%1\\s*>&quot;).arg(tag), QRegularExpression::CaseInsensitiveOption), QString("<%1/>&quot;).arg(tag)); } // 4. 移除无效的</link>结束标签 result.replace("</link>", "&quot;); // 5. 添加XML声明 if (!result.contains("<?xml&quot;)) { result.prepend("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n&quot;); } return result; }
最新发布
07-06
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值