Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Problem ze zmianą kodowania, iconv(): Detected an illegal character
nexis
post 7.09.2007, 11:40:57
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Przenoszę tabelę zapisaną w UTF-8 do tabeli LATIN-2. Do zmiany kodowania używam funkcji:
  1. <?php
  2. iconv("UTF-8","ISO-8859-2", $row['title']);
  3. ?>

która niestety nie zawsze chce zadziałać, a mianowicie wyrzuca błąd:

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /import.php

kiedy spotyka znak już zakodowany prawidłowo do ISO-8859-2. Jakaś rada?

Widok z phpMyAdmin (niektóre znaki są prawidłowo zakodowane, inne nie):


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
tsharek
post 7.09.2007, 11:51:41
Post #2





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


użyj //TRANSLIT lub //IGNORE
więcej w manualu iconv" title="Zobacz w manualu PHP" target="_manual


--------------------
Go to the top of the page
+Quote Post
nexis
post 7.09.2007, 13:31:21
Post #3





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Przy użyciu

  1. <?php
  2. iconv("UTF-8","ISO-8859-2//IGNORE", $row['title']);
  3. ?>


otrzymuję następujący komunikat:

Notice: iconv() [function.iconv]: Detected an incomplete multibyte character in input string in /import.php

Poza tym nie ignoruje znaków, których nie potrafi zakodować, a je usuwa - to niestety nie może mieć miejsca.

//EDIT

Może mało elegancke, ale działa:

  1. <?php
  2. function decode ($string) {
  3. $length = strlen($string);
  4. for ($i=0; $i < $length; $i++) {
  5. switch (ord($string[$i])) {
  6. case 132:
  7. $string[$i] = '"';
  8. break;
  9. case 146:
  10. $string[$i] = "'";
  11. break;
  12. case 148:
  13. $string[$i] = '"';
  14. break;
  15. case 150:
  16. $string[$i] = '-';
  17. break;
  18. case 156:
  19. $string[$i] = 'ś';
  20. break;
  21. case 185:
  22. $string[$i] = 'ą';
  23. break;
  24. default:
  25. } 
  26. }
  27. return addslashes($string);
  28. }
  29. ?>


Ten post edytował nexis 7.09.2007, 14:54:46


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:29