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.
if ($_FILES['pliczek_p']['name'] <> '') { move_uploaded_file($_FILES['pliczek_p']['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']); if($_FILES['pliczek_p']['type'] == 'application/vnd.ms-excel') { list($_temp, $rozsz) = explode('.', $_FILES['pliczek_p']['name']); if($rozsz<>'csv') { echo 'Wgrany niewłaściwy typ pliku. Baza nie zostanie zaktualizowana'; } else { $in = file($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']); $out = fopen($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv', "w"); foreach ($in as $line) { $line = rtrim($line, "\r\n") . PHP_EOL; //echo $line.'<br>'; //echo iconv("CP1250","UTF-8", $line).'<br><hr>'; fputs($out, iconv("CP1250","utf-8", $line)); } fclose($out); $username = ; $link = mysql_connect($host, $username, $password) or die('Nie moA1na siÄ™ poA‚Ä…czyć: ' . mysql_error()); @mysql_select_db($database) or die("Nie udaA‚o siÄ™ wybrać bazy danych"); $result=mysql_query("TRUNCATE TABLE cmentarz"); $result=mysql_query("LOAD DATA LOCAL INFILE '".$_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv'."' INTO TABLE cmentarz FIELDS TERMINATED BY ';' IGNORE 1 LINES"); //mysql_free_result($result); mysql_close($link); unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name']); unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES['pliczek_p']['name'].'.csv'); echo 'Plik wgrany'.'<br>'; echo 'Zamknij teraz tę stronę i przejdź do strony głównej.'; ?> <form action="index3.php" method="post"> <input type="submit" value="Strona główna"> </form> <? } } else { } }
Dla polskich znaków taka konwersja działa OK, ale cyrylica wyświetlana jest jako ciąg znaków zapytania "?



Podejrzewam, że cały problem tkwi w linii
ale jak sobie z tym poradzić? Jak warunkowo konwertować jeśli jedna linia zawiera znaki w dwóch kodowaniach Cp1250 i cyrylicy?