Преобразование документа Word в пригодный для использования HTML в PHP - PullRequest
5 голосов
/ 13 октября 2008

У меня есть набор документов Word, которые я хочу опубликовать с помощью написанного мной инструмента PHP. Я копирую и вставляю документы Word в текстовое поле, а затем сохраняю их в MySQL с помощью программы PHP. У меня возникает проблема со всеми нестандартными символами, которые есть в документах Word, такими как фигурные кавычки и эллипсы («...»). В настоящий момент я вручную выполняю поиск и замену таких вещей (а также иностранных символов, таких как e-sharp) на обычные текстовые или HTML-объекты (& eacute; и т. Д.). Есть ли в PHP функция, которую я могу вызвать, которая примет вывод документа Word и преобразование всего, что должно быть сущностями, в сущности, а другие символы, которые не отображаются должным образом в Firefox, в отображаемые символы.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 13 октября 2008

Это хорошо послужило мне в прошлом:

$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8')
3 голосов
/ 13 октября 2008

Лучшим решением было бы убедиться, что ваша база данных настроена на поддержку символов UTF-8. Дополнительные символы, доступные в расширенном наборе, должны охватывать все «нестандартные» символы, о которых вы говорите.

В противном случае, если вам действительно необходимо преобразовать эти символы в объекты HTML, используйте htmlentities () .

1 голос
/ 18 мая 2010

Я думаю, что во всех этих ответах упущен один важный момент. Сама Windows использует Windows-латинскую разновидность latin1, поэтому, если вы вставляете некоторые специальные символы (например, асимметричные кавычки) в форму на компьютере с 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 для превосходного объяснения, которое я изуродовал в краткой форме выше. - Если у кого-то есть лучшее решение (конечно, есть такое!) Того, как PHPify, что объясняет эта статья ... Я хотел бы услышать это!

0 голосов
/ 03 июля 2011

Вот решение, которое я приготовил для проблемы с непереносимым набором символов Windows. Это заменяет оскорбительные символы почти-Latin-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);

Это работает для меня ТМ

0 голосов
/ 13 октября 2008

htmlspecialchars () проделает долгий путь, но следите за тем, чтобы документы Word были грязными.

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