PHP - конвертировать неправильные умлауты (utf8) - PullRequest
0 голосов
/ 15 декабря 2018

как я могу конвертировать неправильные умлауты, такие как:

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

Это мой текущий код, но он не работает:

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

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Попробуй это.Он выводит: äÄöÖüÜß

<?php

$inputs = [ 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß' ];

foreach ($inputs as $input)
{
    echo iconv('UTF-8', 'WINDOWS-1252//TRANSLIT', $input);
}
0 голосов
/ 15 декабря 2018

Ваш 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 вы увидите, что 0xDC равно Ü.

Но, честно говоря, вы должны:

  1. Исправить эти поврежденные данные в источнике.
  2. Просто стандартизируйте UTF8 , если можете.

Один или оба из них сделают вашу жизнь проще.

Редактировать: Отключено mb_ для iconv для соответствия с вопросом.mb_ эквивалент:

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