Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problematyczne znaki podczas zamiany strony kodowej
Forum PHP.pl > Forum > PHP
marcini82
Witam!

Musze zamienic kodowanie tekstu z UTF-8 na ISO-8859-2 przed zapisem do bazy.
Problem w tym, ze ten tekst czesto zawiera nieobslugiwane cudzyslowy skopiowane z Worda, o takie:
Cytat
„ ”

Jak uzywam do konwersji mbstring to zamienia te cudzyslowy na znaki zapytania, a jak uzyje iconv to mi wywali blad ze tekst zawiera nieobslugiwane znaki.
Probowalem zamienic te cudzyslowy na zwykle (ktore moge wklepac z klawiatury) za pomoca str_replace, ale Eclipse mi nie chce w ogole zapisac pliku php bo tych znakow nie moze zapisac w kodowaniu ISO.

Co z tym zrobic? Jak to zamienic na zwykly cudzyslow?

Moge ostatecznie kazac mbstring je usunac za pomoca
Kod
ini_set('mbstring.substitute_character', 'none');

ale to nie jest dobre wyjscie.
ghash
Takie coś znalazłem w funkcjach szablonowych w EdHTML.
Ale te funkcje tylko zmieniają kodowanie jedynie z win1250 i iso8859.


$string = strtr($string, "\xA1\xA6\xAC\xB1\xB6\xBC", "\xA5\x8C\x8F\xB9\x9C\x9F"); //ISO8859-2 -> WIN-1250
lub
$string = strtr($string, "\xA5\x8C\x8F\xB9\x9C\x9F", "\xA1\xA6\xAC\xB1\xB6\xBC"); //WIN-1250 -> ISO 88592

Może to cię jakoś naprowadzi:)
marcini82
Dzieki, naprowadzilo mnie o tyle, ze jesli znalbym taki kod w stylu
Cytat
\xf3

dla tych "zlych" cudzyslowow i dla zwyklego, to moglbym to zamienic.

Tylko jak odczytac taki kod dla wybranego znaku?
cadavre
Tutaj są entitiesy HTML'a oparte o powyższy zapis:

http://www.w3schools.com/tags/ref_entities.asp

To co potrzebujesz to najprawdopodobniej:
left double quotation mark i right double quotation mark

Tutaj szczegółowo: http://www.fileformat.info/info/unicode/char/201c/index.htm
marcini82
Poszukiwane przeze mnie znaki to:
http://www.fileformat.info/info/unicode/char/201e/index.htm
http://www.fileformat.info/info/unicode/char/201d/index.htm

Chcialbym je zamienic na:
http://www.fileformat.info/info/unicode/char/0022/index.htm

Niestety, nie udaje mi sie sad.gif

Probowalem tak dla pierwszego znaku:
Kod
$zamienniki = Array('\xE2\x80\x9E' => '\x22');
$input = strtr($input, $zamienniki);


albo tak:
Kod
$zamienniki = Array('\x201e' => '\x22');
$input = strtr($input, $zamienniki)

Wzorowalem sie na przykladzie ghasha i na tym:
http://php5.pl/php/konwersja_systemu_kodow..._win1250_i_utf8

Nie dziala. W jakiej postaci mam podac kody znakow, aby zadzialalo?


EDIT:
Juz wiem: trzeba bylo uzyc podwojnych cudzyslowow:
Kod
$zamienniki = Array("\xE2\x80\x9E" => "\x22");
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.