Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SOLVED] Odbc, Access i kodowanie znaków
patrycjusz
post
Post #1





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Witam,

Walczę z tym już dobre pare godzin (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Zastrzele się jak rozwiązanie się okaże bajecznie proste (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Otóż mamy sobie plik PHP który łączy się po ODBC do Access'a i ciągnie sobie dane.
Problem jest z kodowaniem znaków:
1. rekordy mają różne kodowanie - raz ASCII raz UTF-8,
2. iconv mimo iż bym chciał - nie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Poniżej kod (troche już zamotany (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )
  1. <?php
  2. ini_set('default_charset', 'UTF-8');
  3.  
  4. mb_internal_encoding("UTF-8");
  5.  
  6. echo implode(", ", mb_detect_order());
  7.  
  8. $dsn = "odbc:Driver={Driver do Microsoft Access (*.mdb)};Dbq=C:dane.mdb;Uid=Admin";
  9. $pdo = new PDO($dsn);
  10. $sql = "tutaj jesst select";
  11. iconv_set_encoding("internal_encoding", "UTF-8");
  12. //iconv_set_encoding("input_encoding", "UTF-8");
  13. iconv_set_encoding("output_encoding", "UTF-8");
  14.  
  15. $member = "pierwsza linia w pliku CSV";
  16.  
  17. foreach($pdo->query($sql) AS $row){
  18. $data = "";
  19. if($row['E-MAIL'] == null || $row['EMAIL_FIRMA'] == null){
  20.  
  21. }else{
  22. echo mb_detect_encoding($row['FIRMA']);
  23.  
  24. if(is_null($row['E-MAIL'])){
  25. $emails = explode(";",$row['EMAIL']);
  26. $data .= iconv('iso-8859-2','UTF-8',$email[0])."|";
  27. }else{
  28. $data .= iconv('iso-8859-2','UTF-8',$data['E-MAIL'])."|";
  29. }
  30.  
  31. $data .= iconv('iso-8859-2','UTF-8',$row['KOLUMNA'])"; //nie pomaga :)
  32. }
  33. echo mb_detect_encoding($data); //raz jest ASCII raz utf-8
  34. if(mb_detect_encoding($data) == 'UTF-8'){
  35. $member .= $data;
  36. }else{
  37. echo mb_detect_encoding($data);//raz wyswietla sie raz nie ;)
  38. }
  39. echo "n";
  40. }
  41. ?>


Nie będę tłumaczył do czegoż ma to służyć bo historia jest tak długa że hej a baza jest w takim stanie, że szok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Temu kto rozwiąze problem stawiam browarów 5 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pzdr, patS

Ten post edytował patrycjusz 6.07.2007, 13:02:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
patrycjusz
post
Post #2





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Walcze, walcze,

ostatni kod:
  1. <?php
  2.  
  3. $tableName = "ms_access_members";
  4. $dsn = "odbc:Driver={Driver do Microsoft Access (*.mdb)};Dbq=C:dane.mdb;Uid=Admin";
  5. $pdo = new PDO($dsn);
  6. $sql = "select * ....";
  7.  
  8. $member = "email|firma";
  9.  
  10. foreach($pdo->query($sql) AS $row){
  11. echo "before: ".mb_detect_encoding($row['FIRMA']);
  12. $data = "";
  13. if($row['E-MAIL'] == null || $row['EMAIL_FIRMA'] == null){
  14.  
  15. }else{
  16. if(is_null($row['E-MAIL'])){
  17. $emails = explode(";",$row['EMAIL_FIRMA']);
  18. $data .= iconv('cp1250','UTF-8',$email[0])."|";
  19. }else{
  20. $data .= iconv('cp1250','UTF-8',$data['E-MAIL'])."|";
  21. }
  22.  
  23. $data .= iconv('cp1250','UTF-8',$row['FIRMA'])."n"; 
  24. }
  25. echo "after: ".mb_detect_encoding($data);
  26. echo "n";
  27. $member .= $data;
  28. }
  29. ?>

a teraz skrawek z wywołania z lini poleceń tego skryptu PHP
  1. before: ASCIIafter: UTF-8
  2. before: ASCIIafter: UTF-8
  3. before: UTF-8after: UTF-8
  4. before: UTF-8after: ASCII
  5. before: UTF-8after: ASCII
  6. before: ASCIIafter: ASCII
  7. before: ASCIIafter: ASCII
  8. before: ASCIIafter: UTF-8
  9. before: after: UTF-8
  10. before: after: UTF-8
  11. before: after: ASCII
  12. before: after: ASCII
  13. before: after: ASCII
  14. before: UTF-8after: ASCII


Ha! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) poprostu boskie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

a tak poważnie, próbowałem już i windows-1250 i cp1250

Mam wrażenie, że iconv coś nie do końca to łapie.

Sam plik jest w utf-8.

pzdr, patS

Dobra Panowie, czuje, że jestem blisko,
stawka wzrasta do 7 piw (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Do odbioru na żoliborzu albo na polach mokotowskich (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Patrzcie, jak zacząłem printować poszczególne wartości i ich kodowanie to jest prawidłowość:
1. Tam gdzie są polskie fonty - jest utf-8
2. Tam gdzie nie ma polskich fontów - jest ASCII

pzdr, patS
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 13:58