DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   UTF-8 pisanje u fajl (http://www.devprotalk.com/showthread.php?t=6290)

Nemanja Avramović 23. 09. 2008. 18:14

UTF-8 pisanje u fajl
 
Imam neke podatke u bazi koje moram da eksportujem u fajl (ne u .sql već u custom format) i eksport radim php skriptom tako što izvučem podatke iz baze i onda ih sa fopen/fwrite/fclose upišem u fajl.

Međutim, kad tako upisujem stringove koji sadrže naša slova, u fajl se ne upisuju naša slova. Odnosno š se upiše, ali Č i Đ neće.

Probao sam nešto što sam našao na http://php.net/fwrite, tipa
PHP kôd:

fwrite($fh,utf8_encode($myString)); 

ili da dodam \xEF\xBB\xBF na početak unetog teksta, a \xEF\xBB\xBF je valjda Byte Order Mark, ali ništa od ovoga ne radi. A ionako bih više voleo da nemam BOM u fajlovima.

Je l' se neko ranije susretao sa ovim i da li možda zna rešenje za ovaj problem? Tražio sam po netu ali nisam našao ono što mi treba.

Milos Vukotic 23. 09. 2008. 18:39

Jesi li provjerio sami string koji upisuješ?
Probaj
die(mb_detect_encoding($myString));
prije nego ga upišeš u fajl, možda je greška u njemu...

f13o 23. 09. 2008. 19:02

Можда сам погрешно разумео, али ако ти је стринг већ у Utf-8 када прочиташ из базе, мислим да нема потребе да га поново кодираш у Utf-8...

Nemanja Avramović 23. 09. 2008. 19:03

mb_detect_encoding vraća false

mada je string u bazi upisan u polju utf8_general_ci i sve lepo radi kad ispisujem to na stranici etc...

izmena: f13o, pisali smo u isto vreme... kao što rekoh, probao sam bez ikakvog enkodovanja, samo fopen/fwrite/fclose, ali opet ne dobijam utf-8 u fajlu

mangia 23. 09. 2008. 19:44

Imao sam slicnu situaciju ali samo na prvi pogled. Kada snimim fajl na disk i otvorim ga notepad-om recimo sve bude ok...

Nikakav enkoding ne landaram... sirovo iz baze ide direkt u fajl...

f13o 23. 09. 2008. 20:06

Не будем лењ, па направим тест мали....

база: utf8, utf8_general_ci
најједноставнија, два поља (id, field - varchar)

код: test.php
PHP kôd:

<?php

echo "test:\n";

$conn mysql_connect('192.168.33.201','test','pasvord');

if (!
$conn) {
    echo 
"Unable to connect to DB: " mysql_error();
    exit;
}
       
if (!
mysql_select_db('test')) {
    echo 
"Unable to select mydbname: " mysql_error();
    exit;
}

mysql_set_charset('utf8',$conn);

// file
$file fopen('test.txt','w+');
$res mysql_query('select * from test1',$conn);

while (
$row mysql_fetch_assoc($res))
{
  echo 
$row['field'] . "\n";
  
fwrite($file$row['field']);
}

?>

Ово ми даје ћирилицу и на конзолу, и у браузер и у фајл test.txt. Све то на линуксу (мада ни Windows не би семо да даје друге резултате).

Надам се да помаже...

Nemanja Avramović 23. 09. 2008. 20:44

Znači, ne verujem... zaboravio sam da odradim:

PHP kôd:

mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'"); 

Ja nemam funkciju mysql_set_charset() jer imam PHP 5.2.0, ali u svakom slučaju, kad sam je video kod tebe u kodu setio sam se ovoga. Hvala, sad radi.

A samo pre sat-dva sam isto ovo dodavao na jednom drugom mestu (drugi fajl) u istom projektu jer nije htelo da mi ispisuje naša slova (doduše nisam pisao u fajl).

ivanhoe 24. 09. 2008. 01:35

ne moras sve tri komande, SET NAMES ti odradi sve osim SET COLLATION_CONNECTION (ali ako je tabela u utf8 to je vec podeseno za tabelu valjda?), a SET CHARACTER SET ti uradi sve sto i SET NAMES plus i collation, pa je on sam po sebi dovoljan.


Vreme je GMT +2. Trenutno vreme je 01:33.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.