Как мне следует обращаться с кодировками символов при хранении просканированного веб-контента для поисковой системы в базе данных MySQL? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть сканер, который загружает веб-страницы, очищает определенный контент, а затем сохраняет этот контент в базе данных MySQL.Позже это содержимое отображается на веб-странице при поиске (стандартная настройка типа поисковой системы).

Обычно содержимое имеет два разных типа кодирования ... UTF-8 или ISO-8859-1 или не указывается,В моей таблице базы данных используется кодировка cp1252 west european ( latin1 ).До сих пор я просто фильтровал все символы, которые не являются буквенно-цифровыми, пробелами или пунктуацией, используя регулярные выражения перед сохранением содержимого в MySQL.По большей части это устранило все проблемы с кодировкой символов, и содержимое отображается правильно при вызове и выводе в HTML.Вот код, который я использую:

function clean_string( $string )
{

    $string = trim( $string );

    $string = preg_replace( '/[^a-zA-Z0-9\s\p{P}]/', '', $string );

    $string = $mysqli->real_escape_string( $string );

    return $string;

}

Теперь мне нужно начать захват «специальных» символов, таких как товарный знак, авторские права и зарегистрированные символы, и у меня возникли проблемы.Независимо от того, что я пытаюсь, я получаю странные символы при повторном отображении контента в HTML.

Из того, что я прочитал, звучит так, будто я должен использовать UTF-8 для кодирования базы данных.Как мне убедиться, что все мои данные преобразованы должным образом перед сохранением в базе данных?Помните, что мой оригинальный контент поступает со всего Интернета в различных форматах кодирования.Есть ли какие-то другие шаги, которые я пропускаю и которые могут вызывать у меня проблемы?

Ответы [ 4 ]

1 голос
/ 21 ноября 2011

Вы должны преобразовать кодировку вашей базы данных в UTF-8.

О содержании: для каждой сканируемой страницы извлекайте кодировку страницы (из заголовка HTTP / meta charset) и используйте эту кодировку для преобразования в utf-8 следующим образом:

$string = iconv("UTF-8", "THIS STRING'S ENCODING", $string);

Где ЭТО СТРОКА - это та, которую вы только что схватили, как описано выше.

Руководство по PHP для iconv: http://be2.php.net/manual/en/function.iconv.php

0 голосов
/ 29 октября 2014

Ниже работал для меня, когда я собираю и представляю данные на html-странице.

  1. При очистке данных с внешнего сайта выполните код utf8_en: utf8_encode(trim(str_replace(array("\t","\n\r","\n","\r"),"",trim($th->plaintext))));
  2. Перед записью на страницу HTML установите кодировку в utf-8: <meta charset="UTF-8">
  3. Во время написания эхо-кода на html выполните код utf8_dec.

Это помогло мне решить проблему, связанную с проверкой HTML. Надеюсь, кто-то еще найдет это полезным.

0 голосов
/ 21 ноября 2011

Чтобы справиться с кодировкой ISO, просто используйте utf8_encode при сохранении и utf8_decode при получении.

Попробуйте выполнить кодирование / декодирование, даже если это предположительно UTF-8, и посмотрите, работает ли это для вас. Я часто видел, как люди говорят, что что-то есть UTF-8, когда это не так.

Вам также необходимо изменить базу данных на UTF-8.

0 голосов
/ 21 ноября 2011

UTF-8 охватывает почти все. Это определенно будет моим выбором.

Что касается хранения данных, просто убедитесь, что соединение с вашей базой данных использует правильную кодировку. См. руководство .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...