список символов мусора, таких как ’
Я использую 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>"Garbage"</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_.