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ę.