Преобразование документа Word в удобный HTML в PHP
У меня есть набор документов Word, которые я хочу опубликовать с помощью написанного мной инструмента PHP. Я копирую и вставляю документы Word в текстовое поле, а затем сохраняю их в MySQL с помощью программы PHP. Проблема, с которой я сталкиваюсь, возникает из-за всех нестандартных символов, которые есть в документах Word, таких как фигурные кавычки и многоточия ("..."). Что я делаю в данный момент, так это вручную ищу и заменяю такие вещи (а также иностранные символы, такие как e-acute) либо обычным текстом, либо объектами HTML (é и т.д.) Есть ли в PHP функция, которую я могу вызвать, которая будет выводить текстовый документ и преобразовывать все, что должно быть сущностями, в сущности и другие символы, которые неправильно отображаются в Firefox, в символы, которые отображаются.
Спасибо!
5 answers
Лучшим решением было бы убедиться, что ваша база данных настроена на поддержку символов UTF-8. Дополнительные символы, доступные в расширенном наборе, должны охватывать все "нестандартные" символы, о которых вы говорите.
В противном случае, если вам действительно необходимо преобразовать эти символы в HTML-объекты, используйте htmlentities().
Это хорошо служило мне в прошлом:
$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8')
Я думаю, что все эти ответы упускают один важный момент. Сама Windows использует латинский вариант Windows 1, поэтому, если вы вставляете некоторые специальные символы (например, асимметричные кавычки) в форму на компьютере с Windows, и они отправляются в окно unix (или что-либо другое, не относящееся к muckrosoft) (будь то база данных или что-то еще), некоторые символы не сопоставляются ни с чем, что понимает система unix, следовательно, запутанные и искаженные символы. Это означает, что даже если у вас есть база данных UTF-8, и используйте htmlentities, некоторые гадости все равно пройдут, потому что это символы, которые ОС не распознает - они даже не являются частью UTF-8 - это изобретения только для Microsoft. Я хотел бы узнать об удобном решении - что я делаю, так это вручную заносю в черный список коды символов только для Microsoft, с которыми я столкнулся, с (также ручным) списком символов UTF-8, выполняю str_replace для всех из них, а ЗАТЕМ вы можете делать с ними все, что захотите - iconv, htmlentities, сохраняйте прямо в базу данных utf8 это больше не имеет значения.
Мое понимание всего этого немного шаткое - проверьте http://www.cs.tut.fi /~jkorpela/www/windows-chars.html за отличное объяснение, которое я изуродовал в краткой форме выше. - Если у кого-то есть лучшее решение (наверняка оно есть!) о том, как уточнить то, что объясняется в этой статье... Я бы с удовольствием это послушал!
Htmlspecialchars() поможет вам пройти долгий путь, но будьте осторожны, потому что документы Word являются грязными.
Вот решение, которое я придумал для проблемы с непереносимым набором символов Windows. Это заменяет оскорбительные символы почти латинского алфавита 1 их эквивалентными HTML-объектами.
$translation=array(
// reference from http://www.cs.tut.fi/~jkorpela/www/windows-chars.html
"\x82" => "‚",
"\x83" => "ƒ",
"\x84" => "„",
"\x85" => "…",
"\x86" => "†",
"\x87" => "‡",
"\x88" => "ˆ",
"\x89" => "‰",
"\x8a" => "Š",
"\x8b" => "‹",
"\x8c" => "Œ",
"\x91" => "‘",
"\x92" => "’",
"\x93" => "“",
"\x94" => "”",
"\x95" => "•",
"\x96" => "–",
"\x97" => "—",
"\x98" => "˜",
"\x99" => "™",
"\x9a" => "š",
"\x9b" => "›",
"\x9c" => "œ",
"\x9f" => "Ÿ",
);
return str_replace(array_keys($translation),array_values($translation),$input);
Это Работает Для МеняТМ