[英]Odd encoding issue after UTF-8 straightens “most” things out
好的,所以我们有一个脚本,可以将电子邮件发送到thunderbird,将部分消息转换为html并将其保存到MySQL。 每个文件,每个写入的部分都设置为UTF-8。 最后,在我的工作结束时,CRM(用PHP5.3编写的预期输出Chrome和Firefox),我拉出消息,连同其他信息并显示类似于GMail的内容,但作为我们员工的“任务列表”。
我遇到的问题,如果你还没有猜到,一些客户的电子邮件显然是使用不同的编码。 因此,一些(不是全部,当然不是大多数)电子邮件不能正确显示所有字符。
起初我使用utf8_encode
来使电子邮件看起来正确,这有助于大多数来自数据库的电子邮件消息,但是,有些电子邮件会出现错误的字符。
在DB这些“坏撇号”出现’
,但经过utf8_encode
他们来通过的 ??
。 我已经尝试过各种编码方法来根据需要进行猜测和更改,但是,这往往会伤害绝大多数其他电子邮件。
管道或另一端的任何建议,我如何获得这些电子邮件以匹配其他所有内容,或者我如何至少在最后创建一个可能的preg_replace
过滤器或什么?
根据mb_detect_encoding
即使是带有错误字符的电子邮件也会以utf-8
形式传递给php。 这是在任何额外编码之前。 iconv
确实检测到那些问题,但这真的让我无法解决它们,只是在屏幕上放了一个php错误框而不是它说它应该给的简单的FALSE
返回,所以这似乎也是没有解决方案。
问题是您不知道邮件的编码。 utf8_encode
仅从ISO-8859-1编码为UTF-8。 因此,您可以尝试使用mb_detect_encoding获取编码,然后使用iconv转换为UTF-8。
编辑:您也可以尝试阅读Content-Type
的邮件字符集。
首先,我要感谢SebastiánGrignoli创建这个非常方便的课程 ( 原始 )。 我最终将其用于最终解决方案。
其次,我将课程添加到Codeigniter 。 对于任何使用CI的人来说,这是一个简单的实现。 只需在名为Encoding.php
application/libraries
创建一个文件(是的,使用大写e
)。 然后将代码复制到该文件,但在第40行注释掉(或删除) namespace ForceUTF8
。
我的最终结果如下:
echo(Encoding::fixUTF8(utf8_decode($msgHTML)));
我还在仔细检查,但到目前为止,我还没有发现一个错误!
如果我在此之后发现另一个编码问题,我会确保更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.