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.
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
{
echo 'Wgrany niewłaściwy typ pliku. Baza nie zostanie zaktualizowana'; }
}
Dla polskich znaków taka konwersja działa OK, ale cyrylica wyświetlana jest jako ciąg znaków zapytania "?(IMG:
style_emoticons/default/questionmark.gif) ? (IMG:
style_emoticons/default/questionmark.gif) ? (IMG:
style_emoticons/default/questionmark.gif) ".
Podejrzewam, że cały problem tkwi w linii
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?