首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICONV函数和Windows-1252

ICONV函数和Windows-1252
EN

Stack Overflow用户
提问于 2012-12-05 20:12:31
回答 1查看 6.5K关注 0票数 0

我有一个从网络邮件中读取电子邮件并将数据保存在数据库中的应用程序。我使用PHP的imap库来完成大部分工作。

问题是大多数电子邮件都有多个字符集(主要是ISO-8859-1和UTF-8),所以我必须读取电子邮件中的字符集,并使用iconv函数将其解码为ISO-8859-1。

它适用于大多数字符集,但是当我读取Windows-1252字符集并尝试对其进行解码时,iconv函数没有返回任何内容。

如果我尝试将iconv函数更改为mb_convert_string,它无法正确转换所有字符。

这是我的代码:

代码语言:javascript
复制
if( $part->parameters[$i]->attribute == 'charset' )
    $charset =  $part->parameters[$i]->value;

if (strtolower($charset) != 'iso-8859-1')
    $this->emailMessageTxt = iconv($charset, 'iso-8859-1', $this->emailMessageTxt);

这里有错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 20:15:39

是的,您正在尝试从任何其他字符集转换为ISO-8859-1。ISO-8859-1根本不能表示许多字符,例如它不能表示字符

您应该以另一种方式工作,将所有非UTF-8转换为UTF-8,UTF-8可以表示这个星球上的任何字符。

如果您想忽略无法表示的字符,只需执行以下操作:

代码语言:javascript
复制
$utf8 = "€€€ money"; //My php files are saved in utf-8, don't mind that

$iso8859 = iconv( "UTF-8", "ISO-8859-1//IGNORE", $utf8 );

echo $iso8859; // " money"

也就是说,转换为"ISO-8859-1//IGNORE"

Docs

out_charset输出字符集。

如果您将字符串//TRANSLIT附加到out_charset,则会激活音译。这意味着当一个字符不能用目标字符集表示时,可以通过一个或几个外观相似的字符来近似。如果附加字符串//IGNORE,则无法在目标字符集中表示的字符将被静默丢弃。否则,将从第一个非法字符开始剪切字符串,并生成E_NOTICE。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13723004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档