Vytvoření souboru s utf8 kodováním – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vytvoření souboru s utf8 kodováním – PHP – Fórum – Programujte.comVytvoření souboru s utf8 kodováním – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
22. 3. 2015   #1
-
0
-

Mám problém s vytvářením souborů pomocí php s kodováním utf8. Když vytvořím soubor pomocí fopen, tak ho nevytvoří s kodováním utf8 a uloží veškerou diakritiku jako dva znaky a je to poté nepoužitelné.

PHP soubor je uložen v utf8.

Děkuji předem za nápady na vyřešení.

Nahlásit jako SPAM
IP: 90.180.72.–
peter
~ Anonymní uživatel
3981 příspěvků
23. 3. 2015   #2
-
0
-

fopen vytvori soubor. Kodovani urcuji data, ktera do toho davas a program, ktery to otvira. Pro excel je nutne navic pridat BOM znak na zacatek

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:a070:c2...–
23. 3. 2015   #3
-
0
-

To je asi pravda, ale neřeší to můj problém. Já potřebuji vytvořit a zapsat data do normálního textového souboru, aby všechny speciální znaky byly správně zapsány. Asi jsem se špatně vyjádřil.

Nahlásit jako SPAM
IP: 37.48.35.–
Řešení
peter
~ Anonymní uživatel
3981 příspěvků
23. 3. 2015   #4
-
0
-
Vyřešeno Nejlepší odpověď

Jake kodovani ti ukazuje hlavicka v prohlizeci? Pokud spatne, zkousel jsi to menit pres php header(). A kdyz spatne a chces tam mit spatne, zkousel jsi to prevadet pres php iconv() nebo php mb_ funkce pro praci s utf?
A jak uz jsem psal, take nektere programy chapou utf podle toho, ze prvni znak souboru ma utf8 bom znak. Treba ja to pouzivam tak pro excel csv tabulku import, export databaze.
Spoustu techto otazek by se dalo z toho kodu zodpovedet... Zadny tu nevidim. Ani vzorek s chybnym kodovanim. Proc jsi to sem nedal, kdyz s tim mas problem?

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:a070:c2...–
23. 3. 2015   #5
-
0
-

   

$soubor = fopen("Soubory/".$row['ID'].".html", "w");
fwrite($soubor, $_SESSION['Text']);
fclose($soubor);

Hlavička v prohlížeči ukazuje správně utf8. BOM znak sice pomohl při ukládání souboru, teď se soubor správně uloží, ale když ho PHP znovu chce přečíst, tak mi nic nevypíše.

$soubor = fopen("Soubory/".$row['ID'].".html", "r");
$text = fread($soubor, filesize("Soubory/".$row['ID'].".html"));
fclose($soubor);
echo $text;
Nahlásit jako SPAM
IP: 90.180.72.–
peter
~ Anonymní uživatel
3981 příspěvků
24. 3. 2015   #6
-
0
-

:) Podivej, server ma nastavene posilat nejake hlavicky s kodovanim pro html a php soubory. Pokud to nezmenis. Da se to menit v php.ini (nebo httpconfig), .htaccess, v php pak pres header() nebo ini_set(). U php to zmenis teda snadno, pres ten header, ale u html musis pouzit to php.ini nebo htaccess.
Do souboru se ukladaji binarni data, na to by hlavicka nemela mit asi vliv. Zalezi pak na tom, v jakem formatu mas binarni data. Pod win je v manualu zminka pouzivat wb, rb priznak misto w a r pro fopen.
Nicmene, myslim, ze tvuj problem spis spociva ve zdroji dat, sql. Zkousel jsi SET NAMES pro zmenu kodovani? nicmene, to by se dalo obejit pres iconv, pokud vis, v jakem kodovani ti data vrati databaze.

V tom kousku programu spoustu veci schazi, takze je to opet, jako bys nic nedal. Pises o pridani bom, ale neni tam nic takoveho. Pouzivas tam $row['ID'] ale neni tam cast programu, co tu promennou naplnuje. Je pak tezke ti pomoci, moznosti je vic, kde muze selhat kodovani.

Mozna by byl fajn i vzorek 1-2 radky s diakritikou, aby se dalo tipnout, v jakem kodovani ti to vlastne ulozil (z toho by se dali ty schazejici informace o db, nastaveni serveru a tak vydedukovat, mozna). Idealne jako odkaz uz na soubor, protoze text zkopirovany do forka uz muze byt pozmeneny pri ukladani zpravy.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:e9d3:95...–
peter
~ Anonymní uživatel
3981 příspěvků
24. 3. 2015   #7
-
0
-

google = utf8 kodovani php
https://www.google.cz/search?…
Chapu, ze jestli jste treba resili ve skole php4, ze jsi s problemem s kodovanim jeste neprisel do styku. Tam je defaultne nastavene vsude latin1 swedish.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:e9d3:95...–
24. 3. 2015   #8
-
0
-

V databázi problém není, $row['ID'] je ID z databáze a ukládání už mi funguje, BOM znak to opravil, ale nefunguje čtení vytvořeného souboru, dostanu prázdnou proměnnou. Header používám a HTML je správně nakonfigurované. Já ukládám text a ne binární data. Server je Linux, takže není potřeba b. Vzorek s špatným kódováním nemůžu poskytnout, protože už mi to funguje, ted mi nefunguje čtení.

Nahlásit jako SPAM
IP: 37.48.39.–
peter
~ Anonymní uživatel
3981 příspěvků
24. 3. 2015   #9
-
0
-

Zkus se mrknout na funkci flock(). fwrite funguje spravne jen tehdy, pokud nechteji zapisovat dva uzivatele najednou. Coz je cool pro demo ve skole, kde to spusti jeden ucitel, ale pri vice uzivatelich dojde k poskozeni souboru.
Pripadne, mozna staci filegetcontents(), mozna s podtrzitky mezi.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:e9d3:95...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý