список символов мусора, таких как ’

Я использую librets для извлечения данных из моего сервера RETS. Каким-то образом метод кодирования librets не работает, и я получаю некоторые странные символы в моем выходе. Я заметил, что такие символы, как "'заменяется на". Я не могу найти исправление для librets, поэтому я решил заменить такие символы мусора фактическими значениями после загрузки данных. Мне нужен список таких строк мусора и их эквивалентных символов. Я гуглил для этого, но не нашел никакого ресурса. Может ли кто-нибудь указать мне в список таких мусорных букв и их фактических значений или фрагмент кода, который может генерировать такую букву.

thanx

2 ответов


поиск по слову "UTF-8", потому что это то, что вы видите.

UTF-8-это способ представления символов Юникода в последовательность байтов. ("Символы Unicode" - это полный набор букв и символов, используемых в человеческих языках.) Как правило, один символ Юникода становится 1, 2 или 3 байта в UTF-8. Когда эти байты (числа от 0 до 255) отображаются с использованием набора символов, обычно используемого Windows, они отображаются как "мусор" -- в этом случае 3 "мусорные буквы", которые на самом деле являются 3 байтами кодировки UTF-8.

в вашем примере вы начали с символа smart quote . Его представление в Unicode-это число 8217, или U + 2019 (2019 является шестнадцатеричным для 8217). (Поиск "Unicode" для полного списка символов Юникода и их номеров.) Представление UTF-8 числа 8217 представляет собой трехбайтовую последовательность 226, 128, 153. И когда вы показываете эти три байта как символы, используя кодировку символов Windows "CP-1252" (обычный способ отображения текста в Windows в США), они отображаются как ’. (Поиск "CP-1252" чтобы увидеть таблицу байтов и символов.)

у меня нет списка для вас. Но вы можете сделать это, если вы написали программу на языке, который имеет встроенную поддержку Unicode и UTF-8. Все, что я могу сделать, это объяснить, кто ты. видение.

Если есть способ сообщить librets использовать UTF-8 При загрузке, это может автоматически решить вашу проблему. Я ничего не знаю о либретто, но теперь, когда вы знаете термин "UTF-8", вы можете добиться прогресса.


вопрос напоминание:

"...Я заметил, что такие символы, как "'заменяется на"... я решил заменить такие characeters мусора с фактическими значениями после загрузки данные. Что мне нужно, так это список таких строк мусора и их эквивалентные символы."

строго иметь дело с этой частью:

" мне нужен список таких строк мусора и их эквивалент письмена."

использование php, вы можете генерировать эти символы и их эквивалентность. Работать со всеми 1,111,998 точками Юникода или 109,449 символами Utf8 нецелесообразно. Вы можете использовать диапазон ASCII в следующем цикле между € и Ă или другим диапазоном, который более релевантен вашему контексту.

<?php
  for ($i=128; $i<258; $i++)
    $tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>";

  echo "<table border=1>
    <tr><td>&#</td><td>&quot;Garbage&quot;</td><td>symbol</td></tr>";
    echo $tmp1;
  echo "</table>";
?>

из опыта, в контексте ASCII, большинство" мусорных " символов происходят в диапазоне от & # 128 до ā + (редко) ῁ до ‶.

для того, чтобы символы "мусора" отображались, html кодировка страницы должна быть установлена в iso-1 или любую другую кодировку, которая вызвала проблему в первую очередь. Они не будут отображаться, если кодировка установлена в utf-8.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

.

"я решил заменить такой фигней characeters с фактическими значениями после загрузки данных"

вы не можете отменить " мусор "с помощью php utf8_decode(), который фактически создаст больше" мусора "на уже"мусоре". Но, вы можете использовать простой и быстрый поиск и заменить функцию php str_replace ().

во-первых, создайте 2 массива для каждого набора символов "мусора", которые вы хотите заменить. Первый массив-это поисковый запрос:

<?php
  //ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257
  $tmp1 = "$SearchArr = array(";
  for ($i=128; $i<258; $i++)
    $tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", ";
  $tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma
  $tmp1 .= ");";
  $tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8");
?>

второй массив является заменяющим термином:

<?php
  //Adapt for your relevant range.
  $tmp2 = "$ReplaceArr = array(\n";
  for ($i=128; $i<258; $i++)
    $tmp2 .= "\"&#".$i.";\", ";
  $tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma
  $tmp2 .= ");";

  echo $tmp1."\n<br><br>\n";
  echo $tmp2."\n";
?>

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

$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString);

Примечание: utf8_decode () не помогает для очистки символов "мусора". Но, его можно использовать предотвратить дальнейшее загрязнение. В качестве альтернативы может быть полезна функция mb_.