首页 文章

HTML编码问题 - “”字符显示而不是“ ”

提问于
浏览
187

我有一个遗留应用程序只是开始行为不端,无论出于何种原因,我不确定 . 它会生成一堆HTML,并由ActivePDF转换为PDF报告 .

这个过程是这样的:

  • 从数据库中提取HTML模板,并在其中包含要替换的标记(例如"~CompanyName~","~CustomerName~"等)

  • 用真实数据替换标记

  • 使用简单的正则表达式函数整理HTML,该函数可以格式化HTML标记属性值(确保引号等,因为ActivePDF的渲染引擎只讨论属性值周围的单引号)

  • 将HTML发送到创建PDF的Web服务 .

在这个混乱中的某个地方,HTML模板(   s)中的不间断空格编码为ISO-8859-1,因此在浏览器(FireFox)中查看文档时它们会错误地显示为"Â"字符 . ActivePDF会对这些非UTF8字符产生影响 .

我的问题:既然我没有时间对其进行调查,是否有一种简单的方法可以重新编码或查找并替换坏字符?我已经尝试通过我扔在一起的这个小功能发送它,但它把它变成了gobbledegook并没有改变任何东西 .

Private Shared Function ConvertToUTF8(ByVal html As String) As String
    Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
    Dim source As Byte() = isoEncoding.GetBytes(html)
    Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function

有任何想法吗?

EDIT:

我现在正在接受这个,虽然它似乎不是一个好的解决方案:

Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
    Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function

7 回答

  • -3

    Problem: 即使我遇到了问题,我们在向CRM系统发送POST请求中发送了一些字符串 '£' ,但是当我们从CRM进行GET调用时,它返回 '£' 并带有一些字符串内容 . 所以我们分析的是 '£' 正在转换为 '£' .

    Analysis: 我们在做研究后发现的故障是在POST调用中我们设置了HttpWebRequest ContentType as "text/xml" 而在GET Call中它是 "text/xml; charset:utf-8" .

    Solution: 因此,作为解决方案的一部分,我们在POST请求中包含 charset:utf-8 并且它可以正常工作 .

  • 321

    就我而言,即使页面被正确编码为UTF-8,我也会得到拉丁十字标志而不是 . 以上没有任何内容有助于解决问题,我尝试了所有 .

    最后改变IE的字体(具有浏览器特定的css)帮助,我使用Helvetica-Nue作为更改为Arial的正文字体解决了问题 .

  • -2

    我在我的几个网站上也得到了这个问题,我需要做的就是为HTML entites定制内容标签 . 在此之前,我更多地删除它们,所以只需更改你的html fiter或解析页面的功能就可以了 . 它主要是由于大多数CMS中的HTML编辑器 . 他们存储解析数据的方式导致了这个问题(在我的例子中) . 愿这也有助于你的情况

  • 22

    在这个混乱中的某个地方,HTML模板(s)中的不间断空格编码为ISO-8859-1,因此它们不正确地显示为“”字符

    'd be encoding to UTF-8 then, not ISO-8859-1. The non-breaking space character is byte 0xA0 in ISO-8859-1; when encoded to UTF-8 it' d为0xC2,0xA0,如果您(错误地)将其视为ISO-8859-1,则显示为 "Â " . 这包括你可能没有注意到的结尾;如果那个字节不存在,那么其他东西已经破坏了你的文档,我们需要进一步了解你的内容 .

    什么是正则表达式,模板是如何工作的?如果你的   字符串(正确地)被转换为U 00A0非破坏空格字符,似乎某个地方会涉及到正确的HTML解析器 . 如果是这样,您可以在DOM中本机处理模板,并要求它使用ASCII编码进行序列化,以将非ASCII字符保留为字符引用 . 这也将阻止你对HTML本身进行正则表达式后处理,这本身就是一个非常狡猾的业务 .

    好吧无论如何,现在你可以在文档的 <head> 中添加以下内容之一,看看是否能让它在浏览器中看起来正确:

    • for HTML4: <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

    • for HTML5: <meta charset="utf-8">

    如果你已经这样做了,那么任何剩下的问题都是ActivePDF的错误 .

  • -1

    如果任何人遇到与我相同的问题且charset已经正确,只需执行以下操作:

    • 复制.html文件中的所有代码 .

    • 打开记事本(或任何基本文本编辑器)并粘贴代码 .

    • 去"File -> Save As"

    • 输入您的文件名"example.html"(选择“另存为类型:所有文件( . )”)

    • 选择编码为UTF-8

    • 点击保存,您现在可以删除旧的.html文件,并且应该修复编码

  • 10

    我遇到了同样的问题 . 显然这只是因为PHP无法识别UTF-8 .

    尽管在DreamWeaver中看起来没问题,但是当'''符号一直显示为'£'时,我才开始撕掉我的头发 . 最后我记得我遇到了与索引文件相关的链接问题,如果直接查看的页面可以使用幻灯片显示,但是当与包含一起使用时却不能(但是这不是重点 . 无论如何,我想知道这可能是一个类似的问题,所以我没有把它放入我遇到问题的页面,而是简单地将它放入index.php文件中 - 问题一直在修复 .

  • -1

    原因是PHP无法识别utf-8 .

    在这里,您可以检查HTML中的所有特殊字符

    http://www.degraeve.com/reference/specialcharacters.php

相关问题