【问题标题】:PHP - convert incorrect umlauts (utf8)PHP - 转换不正确的变音符号(utf8)
【发布时间】:2019-05-16 05:18:47
【问题描述】:

如何转换不正确的元音变音,例如:

 ä <- ä
 Ä <- Ä
 ö <- ö
 Ö <- Ö
 ü <- ü
 Ü <- Ü
 ß <- ß
…

这是我当前的代码,但它不起作用:

echo iconv("ISO-8859-1", "UTF-8" "Ü");

【问题讨论】:

标签: php utf-8 iso-8859-1 iconv


【解决方案1】:

您的 mojibake 是由于 UTF8 和 cp1252(这是 Windows 的糟糕版本 8859-1)之间的多个错误编码造成的。如果您反向应用相同的错误编码,如果幸运的话,在大多数情况下,您可以不损坏您的数据。

$in = 'Ü'; // this is copied from StackOverflow 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 是 Ü

但老实说,你应该:

  1. 从源头修复这些损坏的数据。
  2. Just standardize on UTF8 如果可以的话。

其中一项或两项将使您的生活更轻松。

编辑:为了与问题保持一致,将mb_ 换成iconvmb_ 相当于:

$in = 'Ü';
$p1 = mb_convert_encoding($in, 'cp1252', 'utf-8');
$p2 = mb_convert_encoding($p1, 'cp1252', 'utf-8');

【讨论】:

    【解决方案2】:

    试试这个。它输出:äÄöÖüÜß

    <?php
    
    $inputs = [ 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß' ];
    
    foreach ($inputs as $input)
    {
        echo iconv('UTF-8', 'WINDOWS-1252//TRANSLIT', $input);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 2012-03-12
      • 2011-04-18
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多