Как я могу исправить неверные символы HTML на страницах, которые подаются с разными кодировкой?

StackOverflow https://stackoverflow.com/questions/3833300

Вопрос

У меня есть ряд сайтов, которые делают недопустимые символы. Метаги метных страниц указывают кодирование UTF-8. Однако ряд страниц содержат символы, которые нельзя интерпретировать UTF-8, вероятно, потому что файлы были сохранены с другим кодировкой (например, ANSI). Один, в частности, я обеспокоен сейчас, - это модная апострофа (как в »Боб«... извините, если это не отображается правильно). Валидатор W3 указывает на то, что объект является«x92.«Но он не проверяет файл, потому что он не отображается в Unicode. И, конечно, если я открою файл в Notepad ++ и изменить кодировку в UTF-8, символ заменяется на 92 в черном коробка.

Вот мой вопрос: каков самый простой способ исправить это? Должен ли я открыть все страницы и заменить этот персонаж обычным апострофом? Или есть ли быстрое исправление, которое я мог бы добавить (сказать, на IIS), которые могут переопределить или исправить проблему кодирования? Или мне приходится грубые силы найти / заменить? У меня есть сотни страниц на этих сайтах, и я понятия не имею, сколько из них мне придется измениться, поэтому, если кто-то знает, как я мог бы обойти эту проблему, либо исправить его быстро, я буду признателен.

Это было полезно?

Решение

Вы обслуживаете страницы как прямые HTML, или у вас есть другой скрипт, обслуживающий контент? Если у вас есть скрипт, который обслуживает содержимое, этот скрипт может просто искать любой экземпляр x92 и заменить его апострофом. В PHP это было бы простое str_replace ()

Если вы обслуживаете прямой HTML, вам придется фактически изменить сами файлы. Это может быть автоматизировано, однако (и, вероятно, должно быть, если у вас есть сотни файлов) в зависимости от того, какие инструменты вы имеете доступные вам, и какую операционную систему вы находитесь. Так как вы сказали, что вы используете Notepad ++, я полагаю, что безопасно предположить Вы находитесь в MS Windows (поэтому никаких забавных команд Unix для ускорения вещей)

Может быть возможен создать пакетный скрипт, который может сделать это, однако. Существует очень простой инструменты редактирования текста ASCII, встроенные в командную строку. Если это невозможно, то можно сделать программу C или C ++, чтобы сделать это, если у вас есть компилятор в вашей системе и умеренным знаниям C. Если у вас есть первое, а не последнее, спросите, и я буду делать Источник для вас.

Другие советы

Я не уверен в кодировке этого самому себе, но если вы должны делать это, чтобы сделать это путем грубой силы, вы всегда можете написать короткую программу, которая итерации через все ваши веб-страницы, загружает каждый файл в память, работает Regex.replace, чтобы исправить проблему символа и сохраняет файл обратно на диск. Очевидно, не идеально, но лучше, чем открывать каждый файл самостоятельно.

Удачи

Я только что побежал в подобную проблему, где некоторые не нарушающие пространства «XA0» попали в предположительно документ UTF-8. В Notepad ++ они отображаются в черном поле с «XA0», написанным в нем. Однако Notepad ++ не позволяет им копироваться или вставлены.

Я сделал небольшое исследование и узнал, что происходит. Сектор шестигранника показывает, что они кодируются как один байт: «A0», который является недействительным UTF-8. Что-нибудь, а не ASCII, должно быть, по крайней мере, два байта, поэтому правильное кодирование - «C2 A0» в шестнадцатеричном порядке.

Для вашего придающего примера APOSTROPHE вы имеете дело с тем же. На самом деле, хотя ваша проблема более сложная, поскольку в расширенном символе ASCII x92 (десятичная 146) является апострофом, но в Unicode x92 является управляющим символом, а правильная единая кавычка должна быть U + 2019 (десятичный 8217). Добавление этого символа в Notepad ++ (через панель «Редактировать»> «Панель символов) и проверки в редакторе Hex обнаруживает, что правильное шестнадцатеричное кодирование является« E2 80 99 », который в бинарном является 11100010 10000000 10011001. Отказ При удалении управляющего байта UTF-8 (не смелый) дает 0010 0000 0000 0001 1001, что равно десятичному значению 8217.

Правильный способ обращения с этим будет открыть файл в качестве байтового потока (unsigned Char * в C) и искать неправильные последовательности UTF-8. Тогда вы можете либо заменить их с помощью � (см. https://en.wikipedia.org/wiki/utf-8#invalid_byte_sequence.) Или вы можете попробовать настраивать их, делая замены, такие как A0 -> C2 A0 (неправильно закодированное невыполненное пространство) и 92 -> E2 80 99 (неправильно закодирована правая единая кавычка).

Все специальные Sharcters должны быть закодированы HTML, например, символ авторских прав должен быть в вашем HTML как

©

Список объекта HTML:

http://www.w3schools.com/html/html_entities.asp.

Что касается того, как вы реализуете, в значительной степени зависит от того, как вы создаете код в первую очередь, но что-то вроде ASP.NET будет иметь функции серверов, такие как:

Server.HTMLEncode("string with special chars")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top