Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konwersja znaków specjalnych z MS Word
Konio
post 22.10.2008, 11:50:41
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.04.2005

Ostrzeżenie: (0%)
-----


Witam,
W jaki sposób zamieniacie znaki spcjalne wklejane z MS Worda (trzykropek, cudzysłowy, długi myslnik) na bardziej przyjazne?
Stronę/szablony, pliki ze skryptami, dane w bazie mam w UTF-8.

Podłaczam 2 funkcje i nie pomagają (pierwsza nic nie robi, druga niszczy PL znaki). Nic lepszego nie udało mi się wygooglować.
Testowałem zarówno na danych przesyłaanych postem z formularza jak i na sztywno zdefiniowanych w zmiennej.

1. znaleziona w komenatrzach na http://pl.php.net/strtr

CODE
$badlatin1_cp1252_to_htmlent =
array(
'\x80'=>'€', '\x81'=>'?', '\x82'=>'‚', '\x83'=>'ƒ',
'\x84'=>'„', '\x85'=>'…', '\x86'=>'†', \x87'=>'‡',
'\x88'=>'ˆ', '\x89'=>'‰', '\x8A'=>'Š', '\x8B'=>'‹',
'\x8C'=>'Œ', '\x8D'=>'?', '\x8E'=>'Ž', '\x8F'=>'?',
'\x90'=>'?', '\x91'=>'‘', '\x92'=>'’', '\x93'=>'“',
'\x94'=>'”', '\x95'=>'•', '\x96'=>'–', '\x97'=>'—',
'\x98'=>'˜', '\x99'=>'™', '\x9A'=>'š', '\x9B'=>'›',
'\x9C'=>'œ', '\x9D'=>'?', '\x9E'=>'ž', '\x9F'=>'Ÿ'
);
$str = strtr($str, $badlatin1_cp1252_to_htmlent);


2. znaleziona w komentarzach na http://pl.php.net/chr

CODE
<?php
$str = str_replace(chr(130), ',', $str); // baseline single quote
$str = str_replace(chr(131), 'NLG', $str); // florin
$str = str_replace(chr(132), '"', $str); // baseline double quote
$str = str_replace(chr(133), '...', $str); // ellipsis
$str = str_replace(chr(134), '**', $str); // dagger (a second footnote)
$str = str_replace(chr(135), '***', $str); // double dagger (a third footnote)
$str = str_replace(chr(136), '^', $str); // circumflex accent
$str = str_replace(chr(137), 'o/oo', $str); // permile
$str = str_replace(chr(138), 'Sh', $str); // S Hacek
$str = str_replace(chr(139), '<', $str); // left single guillemet
$str = str_replace(chr(140), 'OE', $str); // OE ligature
$str = str_replace(chr(145), "'", $str); // left single quote
$str = str_replace(chr(146), "'", $str); // right single quote
$str = str_replace(chr(147), '"', $str); // left double quote
$str = str_replace(chr(148), '"', $str); // right double quote
$str = str_replace(chr(149), '-', $str); // bullet
$str = str_replace(chr(150), '-', $str); // endash
$str = str_replace(chr(151), '--', $str); // emdash
$str = str_replace(chr(152), '~', $str); // tilde accent
$str = str_replace(chr(153), '™', $str); // trademark ligature
$str = str_replace(chr(154), 'sh', $str); // s Hacek
$str = str_replace(chr(155), '>', $str); // right single guillemet
$str = str_replace(chr(156), 'oe', $str); // oe ligature
$str = str_replace(chr(159), 'Y', $str); // Y Dieresis
?>


Macie pomysł co może powodować brak działania tych funkcji?
Ewentualnie macie jakieś sprawdzone rozwiązania do wykonania tego zadania?
Będę wdzięczny za pomoc.

PS może powienem wejściowy string przepuścić przez iconv, aby ustawić inne kodowanie? Wydaje się to jednak mało optymalne.

Znalazłem tymczasowe rozwiązanie.

Dla funkcji/tablicy 2. zakomentowałem następujące linie
CODE
$str = str_replace(chr(156), 'oe', $str); // oe ligature
$str = str_replace(chr(159), 'Y', $str); // Y Dieresis


Rozwalały one literki ś i ź.

Do tego przed konwersją zmieniam stronę kodową

CODE
$str = iconv('utf-8','windows-1250',$str);
$str = seStrMSWordConvert($str);
$str = iconv('windows-1250', 'utf-8', $str);


Rozwiązało to problem i zapewnia poprawne działanie funkcji. Jest troszkę mało eleganckie i może być wolne (ja to sporadycznie wykorzystuję).

Tak więc jeśli ktoś ma lepsza funckcję będę wdzięczny za podzielenie się.

Ten post edytował Konio 22.10.2008, 13:13:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 15:34