如何将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
我想出了这个解决方案。。首先,它转换为utf-8
(包括4字节unicode字符),然后转换为iso 8859-1
,然后剥离不需要的字符,最后编码为utf-8
:D
private function strip_non_ascii($string){
$return = '';
if(preg_match('/^='?(iso-8859-1|utf-8)'?q'?/i', $string)){
$return = str_replace('_',' ', mb_decode_mimeheader($string));
}
elseif(preg_match('/^(iso-8859-1'''')(.*)$/i', $string, $matches)){
$return = utf8_encode(rawurldecode($matches[2]));
}
else{
$return = imap_utf8($string);
}
return utf8_encode(preg_replace('/[^a-zæøåA-ZÆØÅ0-9 '-'.,:]/', '', utf8_decode($return)));
}
使用htmlentities()
将特殊字符转换为HTML实体。您可以选择指定源字符串的编码,我们鼓励您指定该编码。在您的情况下,这将是"UTF-8"。HTML实体存储在数据库中是安全的,以转义形式输出也是安全的,尽管您可以选择使用html_entity_decode
将尽可能多的字符转换回您选择的编码。