Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne]ISO-8859-2 a znaki z MS Word
Skie
post
Post #1





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Witam,
czy da się w jakiś sposób na stronie z kodowaniem ISO-8859-2 wyświetlać znaczki specjalne MS Word?

Czyli np. „

Samo dodanie czegoś takiego do jakiegoś string'a na stronie powoduje, że zamiast niego wyświetla się pytajnik (tak jak przy złym kodowaniu).
Dodam, że próbowałem też zastosować do tego iconv(), ale z marnym skutkiem :-/

Dlaczego tak się dzieje i jak rozwiązać taki problem?

Z góry dzięki za wszystkie pomocne sugestie.


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Pawel_W
post
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


używaj encji smile.gif
Go to the top of the page
+Quote Post
Skie
post
Post #3





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Zrobiłbym tak gdyby chodziło tylko o problem z mojej strony. Ale chodzi głównie o to, że użytkownicy tworząc sobie np. profile piszą je zazwyczaj w Wordzie, potem kopiują na stronę i tam zapisują - i bum - tam gdzie był znak specjalny worda, tekst został ucięty.


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
Pawel_W
post
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


no to htmlspecialchars
Go to the top of the page
+Quote Post
Skie
post
Post #5





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Próbowałem i także nie pomaga.

Kod
$str = htmlspecialchars("„");


W wyniku na stronie daje:



--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




htmlentities?


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Skie
post
Post #7





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Skoro próbowałem htmlspecialchars to chyba logiczne, że inne funkcje z tej dziedziny też wypróbowałem tongue.gif

Koniec końców częściowym rozwiązaniem tego problemu jest funkcja:

  1. function win1252toIso( $string ) {
  2. // These chars seem to be not contained
  3. // in php's CP1252 translation table
  4. static $extensions = array(
  5. 142 => "Ž",
  6. 158 => "ž"
  7. );
  8. // Go through string and decide char by char:
  9. // "leave as is or build entity?"
  10. $newStr = "";
  11. for( $i=0; $i < strlen( $string ); $i++ ) {
  12. $ord = ord( $string[$i] );
  13. if ( in_array( $ord, array_keys( $extensions ) ) ) {
  14. // build entity using extra translation table
  15. $newStr .= $extensions[$ord];
  16. }
  17. else {
  18. // build entity using php's translation table
  19. // or leave as is
  20. $newStr .= ( $ord > 127 && $ord < 160 ) ?
  21. htmlentities( $string[$i], ENT_NOQUOTES, "CP1252" )
  22. : $string[$i];
  23. }
  24. }
  25. return $newStr;
  26. }


Aczkolwiek dla tekstu wpisanego w stronę, a żeby przesłać formularz muszę pobawić się w zmienianie znaków z poziomu JS - (strona na AJAXie).
W każdym razie temat do zamknięcia :-)

EDIT:

Mam już pełne rozwiązanie także dla JSa :-)

Kod
replaceWordChars = function(text) {
    var s = text;
    s = s.replace(/[\u2018|\u2019|\u201A]/g, "\'");
    s = s.replace(/[\u201C|\u201D|\u201E]/g, "\"");
    s = s.replace(/\u2026/g, "...");
    s = s.replace(/[\u2013|\u2014]/g, "-");
    s = s.replace(/\u02C6/g, "^");
    s = s.replace(/\u2039/g, "<");
    s = s.replace(/\u203A/g, ">");
    s = s.replace(/[\u02DC|\u00A0]/g, " ");

    return s;
};


Ten post edytował Skie 1.04.2010, 21:22:13


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
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 Aktualny czas: 21.08.2025 - 03:41