PHP - 转换不正确的变音符号 (utf8)
PHP - convert incorrect umlauts (utf8)
如何转换不正确的变音符号,例如:
ä <- ä
Ä <- Ä
ö <- ö
Ö <- Ö
ü <- ü
Ü <- Ü
ß <- ß
…
那是我当前的代码,但它不起作用:
echo iconv("ISO-8859-1", "UTF-8" "Ü");
你的 mojibake 是由于 UTF8 和 cp1252 之间的多个错误编码造成的,这是 Windows' 糟糕的 8859-1 版本。如果您反向应用相同的错误编码,如果幸运的话,在大多数情况下您可以恢复数据。
$in = 'Ü'; // this is copied from Whosebug where it is UTF8 encoded which
// may or may not match the actual encoding you pasted in.
$p1 = iconv('utf-8', 'cp1252', $in);
$p2 = iconv('utf-8', 'cp1252', $p1);
var_dump(
$in, bin2hex($in),
$p1, bin2hex($p1),
$p2, bin2hex($p2)
);
输出:
string(4) "Ü"
string(8) "c383c593"
string(2) "Ü"
string(4) "c39c"
string(1) "�"
string(2) "dc"
如果您查找 cp1252 encoding table,您会发现 0xDC 是 Ü
。
但老实说,你应该:
- 从源头修复这个损坏的数据。
- Just standardize on UTF8 如果可以的话。
其中一项或两项将使您的生活更轻松。
编辑: 为了与问题保持一致,将 mb_
换成了 iconv
。 mb_
等价于:
$in = 'Ü';
$p1 = mb_convert_encoding($in, 'cp1252', 'utf-8');
$p2 = mb_convert_encoding($p1, 'cp1252', 'utf-8');
试试这个。它输出:äÄöÖüÜß
<?php
$inputs = [ 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß' ];
foreach ($inputs as $input)
{
echo iconv('UTF-8', 'WINDOWS-1252//TRANSLIT', $input);
}
如何转换不正确的变音符号,例如:
ä <- ä
Ä <- Ä
ö <- ö
Ö <- Ö
ü <- ü
Ü <- Ü
ß <- ß
…
那是我当前的代码,但它不起作用:
echo iconv("ISO-8859-1", "UTF-8" "Ü");
你的 mojibake 是由于 UTF8 和 cp1252 之间的多个错误编码造成的,这是 Windows' 糟糕的 8859-1 版本。如果您反向应用相同的错误编码,如果幸运的话,在大多数情况下您可以恢复数据。
$in = 'Ü'; // this is copied from Whosebug where it is UTF8 encoded which
// may or may not match the actual encoding you pasted in.
$p1 = iconv('utf-8', 'cp1252', $in);
$p2 = iconv('utf-8', 'cp1252', $p1);
var_dump(
$in, bin2hex($in),
$p1, bin2hex($p1),
$p2, bin2hex($p2)
);
输出:
string(4) "Ü"
string(8) "c383c593"
string(2) "Ü"
string(4) "c39c"
string(1) "�"
string(2) "dc"
如果您查找 cp1252 encoding table,您会发现 0xDC 是 Ü
。
但老实说,你应该:
- 从源头修复这个损坏的数据。
- Just standardize on UTF8 如果可以的话。
其中一项或两项将使您的生活更轻松。
编辑: 为了与问题保持一致,将 mb_
换成了 iconv
。 mb_
等价于:
$in = 'Ü';
$p1 = mb_convert_encoding($in, 'cp1252', 'utf-8');
$p2 = mb_convert_encoding($p1, 'cp1252', 'utf-8');
试试这个。它输出:äÄöÖüÜß
<?php
$inputs = [ 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß' ];
foreach ($inputs as $input)
{
echo iconv('UTF-8', 'WINDOWS-1252//TRANSLIT', $input);
}