PHP - как определить кодировку? - PullRequest
1 голос
/ 10 марта 2011

Я использую API Amazon для получения описания книг.API возвращает ответы XML, а описание (с HTML) размечено очень плохо.Чтобы справиться с этим плохо размеченным описанием, которое часто нарушает макет моего сайта, я пытаюсь использовать HTML Tidy, чтобы «очистить его».

Чтобы предотвратить отображение «странных» символовна моей веб-странице, я думаю, мне нужно сказать Tidy, что такое входная кодировка и какая кодировка нужна.Я знаю, что хочу, чтобы вывод был UTF8.Однако я не уверен, как определить кодировку ввода (описание книги Amazon).

Я пробовал что-то вроде этого:

mb_detect_encoding($amazon_description);

Это помогло, но я 'я до сих пор иногда получаю странные символы (черный бриллиант с вопросительным знаком на нем: �).Я предполагаю, что я не могу правильно определить кодировку.

Есть предложения, что мне нужно сделать?

РЕДАКТИРОВАТЬ:

Это моетекущее решение:

$sanitized_amazon_markup = preg_replace('/[^\w`~!@#$%^&*()-=_+[\]{}|;\':",.\/<>? ]/', '', $sanitized_amazon_markup);

Я не уверен в этом, так как это может удалить вещи, которые я должен сохранить.

1 Ответ

0 голосов
/ 10 марта 2011

Можете ли вы предоставить свой аккуратный вызов repairString?

Если вы пытались использовать input-encoding и output-encoding из опций tidy, попробуйте не использовать их и использовать третий аргумент или repairString вместо этого, что-токак это:

$oTidy = new tidy();
$page_content = $oTidy->repairString($page_content,
    array("show-errors" => 0, "show-warnings" => false),
    "utf8"
);

Редактировать:

После выполнения некоторых тестов то, что я сказал ранее, не может работать, если у вас нет кодировки utf8 в $page_content уже до вызова repairString

Но в большинстве случаев вы получите кодировку ISO-8859-1 (latin1), если уже не UTF-8.

Могу я предложить вам попробовать:

$charset = mb_detect_encoding($amazon_description, 'UTF-8, ISO-8859-1');
if ($charset == "ISO-8859-1") {
    $amazon_description = utf8_encode($amazon_description);
}
$oTidy = new tidy();
$amazon_description = $oTidy->repairString($amazon_description,
    array("show-errors" => 0, "show-warnings" => false),
    "utf8"
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...