将utf8 / mixed转换为utf8并删除非ascii字符

时间:2015-12-16 17:00:35

标签: php imap

如何将utf8字符串转换为iso 8859-1?

为什么没有imap_mime_header_decode检测到utf8已编码的字符串?

我需要删除所有4字节的unicode字符,以便字符串适合mysql utf8

尝试了这个,但它没有用

$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');

$input = '=?UTF-8?Q?=c3=b8en?=';
echo "$input\n";
$output = '';
foreach(imap_mime_header_decode($input) as $element){
    if($element->charset == 'utf-8'){
        echo "utf8 charset = $element->text\n";
        $output .= $element->text;
    }
    else{
        echo "default charset = $element->text\n";
        $output .= $element->text;
    }
}
// Here output should be iso 8859-1
echo "$output\n";
$string = preg_replace('/[^a-zæøåA-ZÆØÅ0-9 \-\.,:]/', '', $output);
// Back to utf8
$string = utf8_encode($string);
echo "$string\n";

输出

=?UTF-8?Q?=c3=b8en?=
default charset = øen
øen
en

2 个答案:

答案 0 :(得分:0)

使用htmlentities()将特殊字符转换为HTML实体。您可以选择指定源字符串的编码,鼓励指定。在你的情况下,这将是'UTF-8'。 HTML实体可以安全地存储在数据库中,并且可以安全地以转义形式输出,但您可以选择使用html_entity_decode将尽可能多的字符转换回您选择的编码。

答案 1 :(得分:0)

我想出了这个解决方案..首先它转换为utf-8(包括4个字节的unicode字符),然后转换为iso 8859-1,然后剥离不需要的字符,最后编码为{{1} }

:d

utf-8