ohppc
Новичок
проблема с чтением из файла на Windows: вместо a показывает яюa
В файле идут английские буквы a b c d e f по одной на строку. Читаю через trim(fgets($fp, 4096)) и помещаю буквы в массив.
Проблема в том, что первая буква a отображается в массиве как яюa. Если первую строку сделать пустой, то эта пустота может отображаться как яю. Это в мозилле фаирфоксе с кодировкой Windows-1251.
Потом этот массив записываю в файл через fwrite($fp, $letter."\n"), там то видно буквы (включая яюа), то их видно в виде квадратиков.
Использовал режимы r, rb, w, wb.
Самое неприятное, что поведение нестабильное.
На всякий случай привожу код:
-~{}~ 22.02.07 19:29:
никто не знает в чем дело
похоже, это вызвано тем, как помещались буквы в исходный файл: если печатать буквы и сохрянять в кодировке ANSII, то все нормально.
В файле идут английские буквы a b c d e f по одной на строку. Читаю через trim(fgets($fp, 4096)) и помещаю буквы в массив.
Проблема в том, что первая буква a отображается в массиве как яюa. Если первую строку сделать пустой, то эта пустота может отображаться как яю. Это в мозилле фаирфоксе с кодировкой Windows-1251.
Потом этот массив записываю в файл через fwrite($fp, $letter."\n"), там то видно буквы (включая яюа), то их видно в виде квадратиков.
Использовал режимы r, rb, w, wb.
Самое неприятное, что поведение нестабильное.
На всякий случай привожу код:
PHP:
$file = 'C:\www\test.txt';
if (is_file($file)) {
$fp = fopen($file, 'rb');//
//flock($fp, LOCK_EX);
while (!feof($fp)) {
if ($str = trim(fgets($fp, 4096))) {
$arr[] = $str;
}
}
//flock($fp, LOCK_UN);
fclose($fp);
var_dump($arr);
$fp = fopen($file, 'ab');//to write at new order
//flock($fp, LOCK_EX);
ftruncate($fp, 0);
shuffle($arr);
//fwrite($fp, "\n");
while (list($k, $str) = each($arr)) {
fwrite($fp, $str."\n");
}
fflush($fp);
//flock($fp, LOCK_UN);
fclose($fp);
}
никто не знает в чем дело

похоже, это вызвано тем, как помещались буквы в исходный файл: если печатать буквы и сохрянять в кодировке ANSII, то все нормально.