2008-10-13 19 views
5

Mam zestaw dokumentów programu Word, które chcę opublikować za pomocą narzędzia PHP, które napisałem. Kopiuję i wklejam dokumenty Worda do pola tekstowego, a następnie zapisuję je w MySQL przy użyciu programu PHP. Problem powstały ze wszystkich niestandardowych znaków w dokumentach Worda, takich jak kręcone cytaty i elipsy ("..."). Obecnie robię ręcznie wyszukiwanie i zastępuję tego rodzaju rzeczy (a także obce symbole, takie jak e-acute) za pomocą zwykłego tekstu lub elementów HTML (& eacute; itp.) Czy istnieje funkcja w PHP, którą mogę nazwać pobrać wyjście dokumentu programu Word i przekonwertować wszystko, co powinno być elementami na encje, oraz inne symbole, które nie wyświetlają się poprawnie w Firefoksie na symbole, które są wyświetlane.Przekształcanie dokumentu programu Word w użyteczny kod HTML w PHP

Dzięki!

Odpowiedz

3

Lepszym rozwiązaniem byłoby zapewnienie, że baza danych jest skonfigurowana do obsługi znaków UTF-8. Dodatkowe znaki dostępne w rozszerzonym zestawie powinny dotyczyć wszystkich "niestandardowych" znaków, o których mówisz.

W przeciwnym razie, jeśli naprawdę musisz przekonwertować te znaki na encje HTML, użyj htmlentities().

+0

Z mojego doświadczenia, nawet ze wszystkimi kodowania znaków zawartych w porządku, niektóre znaki prostu połknąć czasie dotrą do przeglądarki. Nie wiem, czy jest to błąd w PHP (język serwera, którego używam najbardziej), czy co, ale przekonałem się, że konwersja na podmioty jest bardziej niezawodna. – eyelidlessness

+0

Witaj Richard, jakakolwiek rada, jak ustawić MySQL do obsługi UTF-8? Dzięki! – Ben

+0

CREATE DATABASE db_name CHARACTER SET 'utf8' - patrz http://dev.mysql.com/doc/refman/5.0/en/charset-database.html i http://dev.mysql.com/doc/refman/5.0 /en/charset-table.html. Zauważ, że będziesz musiał zrobić coś takiego jak SET NAMES 'utf8'; po połączeniu się z bazą danych, aby zapewnić pobieranie danych w UTF-8. –

0

htmlspecialchars() da ci długą drogę, ale uważaj, bo dokumenty Worda są brudne.

5

ten służył mi dobrze w przeszłości:

$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8') 
1

Myślę, że wszystkie te odpowiedzi przegap jeden istotny punkt. Sam system Windows używa smaku windowsa latin1, więc jeśli wkleisz jakieś znaki specjalne w (np. Asymetryczne cytaty) do formularza na komputerze z systemem Windows, który zostanie wysłany do skrzynki uniksowej (lub czegokolwiek innego niż muckrosoft) (czy to do bazy danych lub cokolwiek innego) niektóre postacie nie pasują do niczego, co pojmuje system unix, stąd te zagmatwane i zniekształcone postacie. Oznacza to, że nawet jeśli masz bazę danych UTF-8 i używasz htmlentities, niektóre z nich nadal będą musiały przejść, ponieważ są znakami, których system operacyjny nie rozpoznaje - nie są nawet częścią UTF-8 - są wynalazkami tylko dla Microsoftu. Chciałbym wiedzieć, że istnieje sprytne rozwiązanie - ręcznie robię czarną listę kodów znaków znaków microsoftowych, które spotkałem z (również ręczną) listą znaków UTF-8, wykonaj str_replace dla wszystkich tych znaków, i WTEDY możesz zrobić z nimi, co chcesz - iconv, htmlentities, zapisz bezpośrednio w bazie danych utf8, to już nie ma znaczenia.

Moje zrozumienie tego wszystkiego jest trochę drętwe - sprawdź, czy http://www.cs.tut.fi/~jkorpela/www/windows-chars.html jest doskonałym wyjaśnieniem, które przerobiłem na krótką formę powyżej. - Jeśli ktoś ma lepsze rozwiązanie (na pewno tam jest!), Jak do PHPify, co ten artykuł wyjaśnia ... Chciałbym to usłyszeć!

0

Oto rozwiązanie, które przygotowałem dla problemu z nieprzenośnym zestawem znaków Windows. Zastępuje to obrażające się prawie-Latin-1 znaki ich odpowiednikami 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); 

to działa na mnie TM

Powiązane problemy