- support more charset aliases

release-0.6
alecpl 15 years ago
parent 3e8898ef60
commit 1e3271edfb

@ -332,7 +332,7 @@ function rcube_parse_charset($charset)
$charset = preg_replace(array(
'/^[^0-9A-Z]+/', // e.g. _ISO-8859-JP$SIO
'/\$.*$/', // e.g. _ISO-8859-JP$SIO
'/UNICODE-1-1-/', // RFC1642
'/UNICODE-1-1-*/', // RFC1641/1642
), '', $charset);
# Aliases: some of them from HTML5 spec.
@ -352,15 +352,24 @@ function rcube_parse_charset($charset)
'ISO88599' => 'WINDOWS-1254',
'ISO885911' => 'WINDOWS-874',
'MACROMAN' => 'MACINTOSH',
'238' => 'WINDOWS-1250',
'178' => 'WINDOWS-1256',
'177' => 'WINDOWS-1255',
'204' => 'WINDOWS-1251',
'161' => 'WINDOWS-1253',
'222' => 'WINDOWS-874',
'134' => 'GBK',
'238' => 'WINDOWS-1250',
'128' => 'SHIFT-JIS'
);
// allow a-z and 0-9 only and remove X- prefix (e.g. X-ROMAN8 => ROMAN8)
$str = preg_replace(array('/[^a-z0-9]/i', '/^x+/i'), '', $charset);
$str = preg_replace(array('/[^A-Z0-9]/', '/^X+/'), '', $charset);
if (isset($aliases[$str]))
return $aliases[$str];
if (preg_match('/UTF(7|8|16|32)(BE|LE)*/', $str, $m))
if (preg_match('/U[A-Z][A-Z](7|8|16|32)(BE|LE)*/', $str, $m))
return 'UTF-' . $m[1] . $m[2];
if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) {
@ -370,6 +379,11 @@ function rcube_parse_charset($charset)
return $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso;
}
// handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE
if (preg_match('/WINDOWS([0-9]+)/', $str, $m)) {
return 'WINDOWS-' . $m[1];
}
return $charset;
}

Loading…
Cancel
Save