Witam,
Mam problem z wyświetlaniem cyrylicy w bazie danych. Baza zawiera pola tekstowe. Wypełniam bazę danymi z pliku CSV prostym skryptem, wcześniej zamieniając tekst z CP1250 na UTF-8.
  1. if ($_FILES['pliczek_p']['name'] <> '')
  2. {
  3. move_uploaded_file($_FILES['pliczek_p']['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']);
  4. if($_FILES['pliczek_p']['type'] == 'application/vnd.ms-excel')
  5. {
  6. list($_temp, $rozsz) = explode('.', $_FILES['pliczek_p']['name']);
  7. if($rozsz<>'csv')
  8. {
  9. echo 'Wgrany niewłaściwy typ pliku. Baza nie zostanie zaktualizowana';
  10. }
  11. else
  12. {
  13. $in = file($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']);
  14. $out = fopen($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv', "w");
  15. foreach ($in as $line)
  16. {
  17. $line = rtrim($line, "\r\n") . PHP_EOL;
  18. //echo $line.'<br>';
  19. //echo iconv("CP1250","UTF-8", $line).'<br><hr>';
  20. fputs($out, iconv("CP1250","utf-8", $line));
  21. }
  22. fclose($out);
  23.  
  24. $username = ;
  25. $link = mysql_connect($host, $username, $password) or die('Nie moA1na siÄ™ poA‚Ä…czyć: ' . mysql_error());
  26. @mysql_select_db($database) or die("Nie udaA‚o siÄ™ wybrać bazy danych");
  27. $result=mysql_query("TRUNCATE TABLE cmentarz");
  28. $result=mysql_query("LOAD DATA LOCAL INFILE '".$_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv'."' INTO TABLE cmentarz FIELDS TERMINATED BY ';' IGNORE 1 LINES");
  29. //mysql_free_result($result);
  30. mysql_close($link);
  31.  
  32. unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']);
  33. unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv');
  34.  
  35. echo 'Plik wgrany'.'<br>';
  36. echo 'Zamknij teraz tę stronę i przejdź do strony głównej.';
  37. ?>
  38. <form action="index3.php" method="post">
  39. <input type="submit" value="Strona główna">
  40. </form>
  41. <?
  42. }
  43. }
  44. else
  45. {
  46. echo 'Wgrany niewłaściwy typ pliku. Baza nie zostanie zaktualizowana';
  47. }
  48. }

Dla polskich znaków taka konwersja działa OK, ale cyrylica wyświetlana jest jako ciąg znaków zapytania "?questionmark.gif? questionmark.gif? questionmark.gif".
Podejrzewam, że cały problem tkwi w linii
  1. fputs($out, iconv("CP1250","utf-8", $line));

ale jak sobie z tym poradzić? Jak warunkowo konwertować jeśli jedna linia zawiera znaki w dwóch kodowaniach Cp1250 i cyrylicy?