Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]ISO-8859-2 a znaki z MS Word
Forum PHP.pl > Forum > Przedszkole
Skie
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.
Pawel_W
używaj encji smile.gif
Skie
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.
Pawel_W
no to htmlspecialchars
Skie
Próbowałem i także nie pomaga.

Kod
$str = htmlspecialchars("„");


W wyniku na stronie daje:

thek
htmlentities?
Skie
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;
};
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.