В PHP, когда я использую fwrite, я не получаю правильный набор символов - PullRequest
2 голосов
/ 03 февраля 2011

Вот мой код:

<?php
  header("Content-Type: text/html; charset=UTF-8");
  header("Content-Type: application/x-javascript; charset=UTF-8");

  $fName = "demo.txt";
  $str   = "óé";
  fid   = fopen($fName, 'wb') or die("can't open file"); // Open file

  fwrite($fid, $str); // Write to file
  fclose($fid);         // Close file
?>

На экран выводится:

óéü

Когда я открываю файл, я получаю:

óéü

Я пытаюсь сохранить большие объемы данных с помощью fwrite, но символы неправильно кодируются в точке сохранения файла.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2011

fwrite сохраняет двоичные строки.Это не делает никакого преобразования кодировки.Скорее всего, ваш PHP-скрипт находится в неправильной кодировке, и, следовательно, в исходной строке "óéü".Покажите нам bin2hex($str) и bin2hex(file_get_contents('demo.txt')), если вы не можете отладить его самостоятельно.

Есть несколько общих вариантов решения таких проблем:

  • Использование utf8_encode($str) перед сохранением.
  • Запись спецификации UTF-8 в выходной файл сначала fwrite($f, "\xEF\xBB\xBF")
  • правильное преобразование с помощью iconv()
  • или адаптация самого сценария php с помощью recode L1..UTF8 script.php
2 голосов
/ 03 февраля 2011

Какую программу вы используете, чтобы «открыть» файл? эта программа может быть проблемой.

0 голосов
/ 03 февраля 2011

Во-первых, вставьте utf_encode внутри fwrite, например:

<?php

$fName = "demo.txt";
$str   = "óé";
fid   = fopen($fName, 'wb') or die("can't open file"); // Open file

fwrite($fid, utf_encode($str)); // Write to file
fclose($fid);         // Close file
?> 

Далее, не забудьте сохранить ваш PHP-скрипт с кодировкой UTF-8 without BOM.Для этого используйте любой продвинутый редактор кода, например Notepad ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...