![](/img/trans.png)
[英]PHP iconv from utf-8 to windows-1252 with no special characters
[英]ICONV function and Windows-1252
我有一个用于从网络邮件中读取电子邮件并将数据保存在数据库中的应用程序。 我正在使用PHP的imap库来完成大部分工作。
问题是大多数电子邮件具有多个字符集(大多数是ISO-8859-1和UTF-8),因此我必须从电子邮件中读取字符集,并使用iconv函数将其解码为ISO-8859-1。
它适用于大多数字符集,但是当我阅读Windows-1252字符集并尝试对其进行解码时,iconv函数未返回任何内容。
如果我尝试将iconv函数更改为mb_convert_string,它不能正确转换所有字符。
这是我的代码:
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);
那里有错误吗?
是的,您正在尝试从任何其他字符集转换为ISO-8859-1。 ISO-8859-1根本不能表示很多字符,例如,它不能表示字符€
。
您应该一直在进行其他工作,将所有非UTF-8转换为UTF-8,这可以表示地球上的任何字符。
如果要忽略无法表示的字符,请执行以下操作:
$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"
文件 :
out_charset输出字符集。
如果将字符串// TRANSLIT附加到out_charset,则会激活音译。 这意味着当一个字符不能在目标字符集中表示时,可以通过一个或几个外观相似的字符来近似。 如果附加字符串// IGNORE,则无法在目标字符集中表示的字符将被静默丢弃。 否则,将从第一个非法字符中截取str并生成一个E_NOTICE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.