Заменить Word Screws с помощью PHP - PullRequest
0 голосов
/ 26 апреля 2010

Контент люди использовали Word и вставляли вещи в старую систему Unicode. Я сейчас пытаюсь перейти на UTF8.

Однако после импорта данных появляются символы, от которых я не могу избавиться.

Я пробовал следующий поток stackoverflow, и ни одна из предоставленных функций не исправляет эту строку: http://snipplr.com/view.php?codeview&id=11171 / Как заменить цитаты в кодировке Microsoft в PHP

Строка: Danâ??s back for more!!

1 Ответ

3 голосов
/ 26 апреля 2010

В такой ситуации я обычно начинаю со строки, вставленной из слова:

$str = 'Danâ’s back !';
var_dump($str);


И, переходя побитно в нем, я вывожу шестнадцатеричный код каждого байта:

for ($i=0 ; $i<strlen($str) ; $i++) {
    $byte = $str[$i];
    $char = ord($byte);
    printf('%s:0x%02x ', $byte, $char);
}

Который дает такой вывод:

D:0x44 a:0x61 n:0x6e �:0xc3 �:0xa2 �:0xe2 �:0x80 �:0x99 s:0x73 :0x20 b:0x62 a:0x61 c:0x63 k:0x6b :0x20 !:0x21 


Затем, с небольшим количеством предположений, удачи и проб и ошибок, вы обнаружите, что:

  • â - это символ, который умещается в два байта: 0xc3 0xa2
  • и специальная кавычка - это символ, который умещается в три байта: 0xe2 0x80 0x99

Подсказка: легче, когда нет двух специальных символов, следующих друг за другом; -)


После этого нужно просто использовать str_replace для замены правильной последовательности байтов другим символом; например, заменить специальную кавычку обычной:

var_dump(str_replace("\xe2\x80\x99", "'", $str));

Даст вам:

string 'Danâ's back !' (length=14)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...