PHP Encoding

Programovacie jazyky, rady, poradňa...
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

PHP Encoding

Príspevok od používateľa Numline1 »

Zdravim, mam u seba jeden php kod, ktory uklada XML subory cez tuto funkciu :

Kód: Vybrať všetko

function saveFile($destination,$content) {
	if (ini_get('magic_quotes_gpc')) {
		$content = stripslashes($content);
	}	
	$open = fopen($destination,"w+");
	if ($open) {

		if (flock($open,LOCK_EX)) {
			fwrite ($open, $content);	
			flock ($open, LOCK_UN);
		}

		fclose($open);	
		@chmod($destination,0777);
	} else {
		die("Unable to save file (the file may not be writeable, or may not have been created yet. Check the directory permissions.");
	}
	return (true);
}
Problem vsak je, ze cely kod je ulozeny v UTF-8, hlavicky su napisane na UTF-8, iba moj XML subor sa ulozi ci chcem alebo nie, ako Windows CP 1250, tym padom vznikne nekompatibilita a stare dobre nahradzanie znakov "?". Ked zmenim kodovanie tohoto XMLka na UTF-8, nacita sa uplne v poriadku (az na znaky ktore sa pri ukladani poskodili). To by bolo fajn a mohlo tak ostat, lenze pri dalsom zapise cez PHP do tohoto suboru to server zmeni na CP a problem je opat.

Mozete mi prosim poradit ako nastavit server alebo aspon upravit kod tak, aby subory ukladal v UTF-8 ?

Dakujem!

//EDIT :

Skusal som aj fwrite($fh,utf8_encode($myString)); ako to je na php.net ale akosi bez uspechu :(
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Odkiaľ máš ten xml súbor? Bolo by vhodné, aby si upravil kódovanie toho súboru vtedy, keď ho načítaš.
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Príspevok od používateľa Numline1 »

Nacitam alebo do neho zapisem ? Nacitava sa len na vystupnej php stranke ktora ho parsuje, skor by bolo dobre keby sa tie data uz ako utf8 zapisu, kedze problemy vznikaju aj ked utf8 php kod zapisuje do CP1250 suboru.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

výstupné kódovanie (ktoré je štandartne na cp1250) môžeš skúsiť zmeniť pomocou mb_http_output()
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Príspevok od používateľa Numline1 »

Ziadna zmena. Skor ma zaujima ci sa neda Apache upravit tak, aby vytvaral globalne nove subory ako UTF-8
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Apache a Php je úplne jedno, čo ukladáš do súborov.
Na moju otázku si ale neodpovedal, kde berieš údaje, čo ukladáš do toho súboru?
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Príspevok od používateľa Numline1 »

Udaje beriem z POSTu, ale prichadzaju v UTF-8. Cely problem bol v tom, ze sa neboli schopne ulozit do UTF8ka, ale defaultne isli do CP1250.

Problem som ale nakoniec vyriesil asi cez 50 ludi a trosku vlastnej kreativnosti, totiz v php.ini bol zakomentovany riadok, ktory urcoval defautlny encoding.

Kód: Vybrať všetko

; PHP's built-in default is text/html
default_mimetype = "text/html"
; default_charset = "UTF-8"
islo pekne na

Kód: Vybrať všetko

; PHP's built-in default is text/html
default_mimetype = "text/html"
default_charset = "UTF-8"
a problem sa vyriesil. Pre toho koho by to zaujimalo, celu dobu som pracoval so systemom AskPeople (Polls and Surveys).

Dakujem velmi za pomoc ;)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

To len zmení aké kódovanie sa posiela v http hlavičke. Skutočný problém bol v niečom inom (prípadne, ak si tie údaje posielal zo serveru, tak si tomu mal nastaviť mime type a kódovanie). ;)
chmirko
Expert
Expert
Používateľov profilový obrázok
Príspevky: 182
Registrovaný: 05 sep 2008, 15:56
Kontaktovať používateľa:

Príspevok od používateľa chmirko »

teda z toho co ja viem tak v akom kodovani je otvorena stranak ktora so subormi pracuje v takom to aj uklada, cize by som tam vrazil

Kód: Vybrať všetko

header("Content-Type: text/html; charset=UTF-8");
a bolo by


to ze zmenis php ini znamena len to, ze ak hlavicka nieje udana pouzije sa toto kodovanie


najlepsie je to zdvojit, ak to teda ide cez nejaky net prehliadac, lebo asi nepatris k tim co php skripty pustaju cez bat subory priamo do interpretera, tak nastav aj tieto hlavicky a aj stranke META Tagy s kodovanim



defaultne kodovanie samozrejme mozes pridat aj v php.ini aj v httpd.conf ale tusim to potom (mozno som daco zle spravil) bralo defaultne kodovanie vzdy a ignoroval tieto hlavicky, cize ja mam tieto default blbinky povipinane a na kazdej stranke posielam hlavicku v com to ma byt

BACHA, hlavicka musi byt odoslana pred akymkovlek vystupom, aj prazdny riadok uz je vystup
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Príspevok od používateľa Numline1 »

Cize tam staci pridat ten header a php.ini moze byt opat zakomentovane ? To sa mi nejako nezda, vzhladom nato ze problem nebol v subore co to ukladal (imho), ale v tom ktory sa ulozil. Kazdopadne skusim to, uvidim. Dik
chmirko
Expert
Expert
Používateľov profilový obrázok
Príspevky: 182
Registrovaný: 05 sep 2008, 15:56
Kontaktovať používateľa:

Príspevok od používateľa chmirko »

subor ktory sa ulozil.......
hmm tak mozem sa mylit ale podla mna ten subor "neexistuje" a vytvara ho ten subor ktory ho uklada

ak to hodim do zivota, tak ked dieta postavi hranatu loptu z lega je ta lopta vadna alebo ju to decko zle postavilo?

no vyskusaj zistis, mne to funguje, a ked sa nad tym skusam zamyslat nema to ako inak fungovat ak mam robit server pre xx uzivatelov a kazdy si robi svoje produkty s inim kodovanim, nemozem im vsetkym supnut defaultne, musia si to dako nastavovat
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Príspevok od používateľa Numline1 »

php.ini si mozem ovplyvnovat nastastie sam pre seba, pre kazdy adresar zvlast ;) inak teoria s legovou loptou je zaujimava :)
aughostino
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1269
Registrovaný: 26 apr 2007, 16:05

Príspevok od používateľa aughostino »

sorry Numline1, ze sa ti pletiem do temy, ale potreboval by som taku uplne banalnu vecicku, kvoli ktorej sa neoplati vytvarat novu temu

potreboval by som php (alebo aj JS) script, ktory by menil rok v copyrighte stranky

na stranke mam Copyright © 2009 a ked bude rok 2010 aby sa tam zobrazili 2009-2010 (alebo 2009-10) a dalsi rok 2009-2011 (alebo 2009-11)

dalo by sa nieco take "skonstruovat"? :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

<?php 
if(date("Y") > 2009) echo "2009 - "; 
echo date("Y");
?>
Napísať odpoveď