» »

[PHP] charter set windows-1250

[PHP] charter set windows-1250

Blisk ::

Tukaj je del kode, ki zamenja določene znake z znaki windows-1252.
Ker sam nimam pojma o programiranju, bi prosil nekoga, če mi lahko pomaga, namreč, namesto windows-1252 bi rabil codeset windows-1250,
ker mi ne prikaže čšž in ČŠŽ, pač pa namesto tega pokaže ??? (vprašaje)

// Replace non-standard UTF-8 characters.
function _windows1252_replace($string)
{
$badchr = array(
"\x80", // EURO SIGN
"\x81", // UNDEFINED
"\x82", // SINGLE LOW-9 QUOTATION MARK
"\x83", // LATIN SMALL LETTER F WITH HOOK
"\x84", // DOUBLE LOW-9 QUOTATION MARK
"\x85", // HORIZONTAL ELLIPSIS
"\x86", // DAGGER
"\x87", // DOUBLE DAGGER
"\x88", // MODIFIER LETTER CIRCUMFLEX ACCENT
"\x89", // PER MILLE SIGN
"\x8A", // LATIN CAPITAL LETTER S WITH CARON
"\x8B", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
"\x8C", // LATIN CAPITAL LIGATURE OE
"\x8D", // UNDEFINED
"\x8E", // LATIN CAPITAL LETTER Z WITH CARON
"\x8F", // UNDEFINED
"\x90", // UNDEFINED
"\x91", // LEFT SINGLE QUOTATION MARK
"\x92", // RIGHT SINGLE QUOTATION MARK
"\x93", // LEFT DOUBLE QUOTATION MARK
"\x94", // RIGHT DOUBLE QUOTATION MARK
"\x95", // BULLET
"\x96", // EN DASH
"\x97", // EM DASH
"\x98", // SMALL TILDE
"\x99", // TRADE MARK SIGN
"\x9A", // LATIN SMALL LETTER S WITH CARON
"\x9B", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
"\x9C", // LATIN SMALL LIGATURE OE
"\x9D", // UNDEFINED
"\x9E", // LATIN SMALL LETTER Z WITH CARON
"\x9F" // LATIN CAPITAL LETTER Y WITH DIAERESIS
);

$goodchr = array(
"€", // EURO SIGN
"", // UNDEFINED
"‚", // SINGLE LOW-9 QUOTATION MARK
"ƒ", // LATIN SMALL LETTER F WITH HOOK
"„", // DOUBLE LOW-9 QUOTATION MARK
"…", // HORIZONTAL ELLIPSIS
"†", // DAGGER
"‡", // DOUBLE DAGGER
"ˆ", // MODIFIER LETTER CIRCUMFLEX ACCENT
"‰", // PER MILLE SIGN
"Š", // LATIN CAPITAL LETTER S WITH CARON
"‹", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
"Œ", // LATIN CAPITAL LIGATURE OE
"", // UNDEFINED
"Ž", // LATIN CAPITAL LETTER Z WITH CARON
"", // UNDEFINED
"", // UNDEFINED
"‘", // LEFT SINGLE QUOTATION MARK
"’", // RIGHT SINGLE QUOTATION MARK
"“", // LEFT DOUBLE QUOTATION MARK
"”", // RIGHT DOUBLE QUOTATION MARK
"•", // BULLET
"–", // EN DASH
"—", // EM DASH
"˜", // SMALL TILDE
"™", // TRADE MARK SIGN
"š", // LATIN SMALL LETTER S WITH CARON
"›", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
"œ", // LATIN SMALL LIGATURE OE
"", // UNDEFINED
"ž", // LATIN SMALL LETTER Z WITH CARON
"Ÿ" // LATIN CAPITAL LETTER Y WITH DIAERESIS
);
  • spremenilo: snow ()

mHook ::

Tole je del za "naše" črke:
"\xC6", // Ć
"\xE6", // ć
"\xC8", // Č
"\xE8", // č
"\xD0", // Đ
"\xF0", // đ
"\x8A", // Š
"\x9A", // š
"\x8E", // Ž
"\x9E", // ž

Š in Ž bi ti morala delat, za ostalo pa ustrezno popravi/dodaj ustrezne znake.

Če ti niti Š in Ž ne delata, potem imaš problem še nekje drugje (npr. header,...).

Zgodovina sprememb…

  • spremenil: mHook ()

Blisk ::

ne delajo, pa ker se ne spoznam na programiranje, niti ne vem kaj in kje pogledat, našel sem ta del v fajlu in predvidevam da je to to.
Kaj moraš še poiskati?

overlord_tm ::

Ko pogledaš izvorno kodo strani (tisto v browserju), kak charset se pošlje v headerju?

Recimo st. ima:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

Blisk ::

Ok tole je sicer mal težko pogledat, ker dejansko je problem pri tem, da mi ta program, s katerim imam probleme vnaša RSS novice v poste.
Zato sem pogledal izvorno kodo enega posta, ki je vnešen z RSS in tam je v headerju
version="1.0" encoding="windows-1250"?>

mHook ::

Možna težavaj je tudi v HTTP header-ju (poglej z WireSharkom).
V php.ini je privzeto zakomentirana vrsta default_charset = "iso-8859-1".
To lahko popraviš v php.ini, ali pa z funkcijo header.

header("Content-type:application/rss+xml; Charset=windows-1250");

Blisk ::

php.ini imam nastavljeno na widows-1250, predvidevam, da zato v headerju tega ni treba popravljati!

mHook ::

A se da to kje vidt? Dej pošlji lnik, lahko tudi na ZS.

Blisk ::

kaj naj ti pošljem.
php.ini, ali fajl za rss

mHook ::

url, da lahko online vidim, v čem je problem

Blisk ::

ahaaaa, ok dobiš :)

mHook ::

Najverjetneje je problem v tem, da ti (predvidevam) MySQL vrača podatke v napačni kodni tabeli.
Spet "imaš" dve opciji.
Če nimaš dostopa do serverja (oz. my.cnf) takoj po povezavi pošlji na strežnik naslednji query:
SET NAMES cp1250;

(pred časom mi to ni delalo, tako da sem moral uporabiti naslednje tri SQLe:
SET character_set_connection = cp1250";
SET character_set_client = cp1250;
SET character_set_results = cp1250;
)

ali v my.cnf odsek [mysqld] nastaviš tole:
init-connect='SET NAMES cp1250'
ali
default-character-set=cp1250


Če ti pa še to ne dela, preveri collation na bazi, tabelah in stolpcih (če je UTF, cp1250 ali latin2 bi moralo biti ok).

več: 9.4. Connection Character Sets and Collations oz. 9 Character Set Supportj

Blisk ::

Žal ne deluje nič od tega.
Nastavil sem v my.cnf
init-connect='SET NAMES cp1250'
ali
default-character-set=cp1250

karkoli od tega ne deluje

nakar sem spremenil kodo tabele v mysql na
cp1250 ali latin2

pa prav tako ne deluje.

overlord_tm ::

Kaj pa če bi ves output spustil skozi iconv?

Drugače pa, probaj se v browserju poigrat z ročnim nastavlanjem encodinga, da ugotoviš v katerem kodiranju ti sploh izpiše ;)

Blisk ::

Glede na to, da nimam pojma o programiranju, bi prosil če lahko malo bolj podrobne infromacije, kako to naredim.
TNX

overlord_tm ::

iconv je neka funkcija, ki dela nejak podobnega kot si zgoraj omenil ;)

Blisk ::

Sem probal tole, pa mi potem zmeša vse znake na portalu!

mHook ::

Kaj pa če dodaš nekaj prek portala, da se zapiše v bazo, ali je potem ok prikazano.
Z vsem tem kar je napisano v tej temi, so lahko problematični podatki, še posebaj, če si jih uvozil prek DUMP sql stavkov.

Ali ti select iz baze pravilno vrne šumnike (npr. prek phpMyAdmina)?

Blisk ::

če dam copy paste je ok, prek portala je isto, če se uvozi prek RSS.

mHook ::

če dam copy paste je ok, prek portala je isto, če se uvozi prek RSS

Kaj naj to pomeni? Da vse dela?

V čem je problem?

Blisk ::

mogoče sem malo neprimerno napisal.
Hotel sem rečt, če RSS novice skopiram v post, z copy paste, da takrat so čšž ok.

Če jih potegnem not prek fajla, ki vleče dol RSS in ga vnese v post, takrat pa ni čšž.

Tak da, bi prosil še kakšno dobr idejo, ker se mi res ne da vsak dan popravljati v texu čšžje.

mHook ::

Zdaj si si sam odgovoril na vprašanje kje je problem.
Sploh ni v tvojem php-ju ali mysql-u.
Problem je v funkciji, ki vleče dol RSS in ga vnese v post.

Zgodovina sprememb…

  • spremenil: mHook ()

Blisk ::

To sem tudi sam predvideval, zato sem dal zgoraj en del datoteke, ki vleče dol RSS in ga vstavlja v post.
Če se kdo spozna na programiranje bi prosil, če lahko pogleda ta fajl.
TNX

mHook ::

Prvi odgovor v temi je rešitev. Dodaj to na ustrezno mesto (pazi, da na vrszni red in ponavljanje, ker imaš nekatere črke že notri - npr. š in ž), dodati moraš na enako mesto tudi v drugi tabeli.

Pa še to: če izvor uporablja UTF-8 bi to moralo delati, sicer pa se tole ne bo delal.

Blisk ::

Tukaj je link do MODa, pa bi bil zelo vesel, če pogledaš datoteko, ker jst se res ne spoznam, laho samo ugibam.
TNX
Find RSS

mHook ::

Če prav razumem: ne dela uvoz prek RSS iz neke spletne strani?
Katere? Kakšen encoding ima ta stran UTF-8 ali win-1250?

Blisk ::

ne dela iz nobene strani, ker je text vedno brez čšž.
So pa rss strani od TV SLO, Svarog, pa tudi od SLO-TECHa, vsepovsod je isto, brez čžš!

Blisk ::

A tuki mi res noben ne more pomagati?
:(

Blisk ::

Plačam 20€ tistmu, ki mi reši ta problem!

Link do mod je pa tule
Download phpbb MOD FIND 1.2 tukaj

Zgodovina sprememb…

  • spremenil: Blisk ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[php] encoding niza

Oddelek: Izdelava spletišč
173256 (1171) BivšiUser2
»

ubuntu LaTeX sumniki

Oddelek: Programska oprema
133813 (3616) atasmrk
»

MySQL in šumniki

Oddelek: Programiranje
102836 (2607) darkolord
»

LaTeX

Oddelek: Programska oprema
51193 (1028) CaqKa
»

MySQL in czs

Oddelek: Izdelava spletišč
423254 (2344) krho

Več podobnih tem