[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Искажение русского текста PhpStorm
Страницы: 1, 2
Ekonom
Добрый день. Использую такую программу:
<?php

Main_Module1();

function Main_Module1()
{
$FN = 'C:\Users\User\Desktop\test.txt';
$file = fopen($FN, "w");
fwrite($file, 'А');
fclose($file);
}

?>


Эта программа записывает в текстовый файл русскую букву "А". Затем я открываю этот файл в браузере (Яндексе, IE) и буква искажена. То есть проблема с кодировкой.

Если же я открою текстовый файл вручную в блокноте и перепечатаю букву "А", то в браузере уже нет искажения.

Скажите, что нужно сделать, чтобы PhpStorm не искажал русский текст.
sergeiss
Да он и не искажает ничего. Что ты запросил, то он и выдал. Просто тебе нужно с кодировками разобраться.

Для начала: какая кодировка у твоего скрипта пхп?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Ekonom
Я не знаю, какая кодировка у моего скрипта, я не настраивал кодировок. Просто создал файл в PhpStormе, записал туда код и всё.
Ekonom
Сейчас поэкспериментировал. Наверное, PhpStorm здесь не виноват, т.к. я открыл php-файл в блокноте, напечатал там русскую букву и она исказилась в браузере.

Если же русскую букву брать не из текста кода, а из текстового файла, то русская буква не искажается.

Получается, что в php-файле нельзя писать русский текст в некоторых случаях? Например для txt-файлов? Т.к. в html-файле можно задать метатег и русский текст отображается правильно.
inpost
Справа внизу установи кодировку UTF-8 в PHPStorm (кодировка файла), помимо этого в самом скрипте так же пропиши кодировку UTF-8 через header(); Не забудь ранее вывод ошибок включить через error_reporting. Должно быть лучше.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Ekonom
Я сейчас обратил внимание на следующее. Оказывается браузеры не понимают, что у txt-файла кодировка UTF-8 и применяют кодировку Windows 1251.

Интересно можно ли как-то сказать браузеру, что у txt-файла кодировка такая-то?
Или такое только у html-файлов возможно с помощью соответствующего метатега?

У меня сейчас программа создает txt-файл (файл с расширением "txt") и этот txt-файл находится на хостинге. Я дал юзеру ссылку на этот файл и юзер открывает файл через браузер.

Я вот подумал. Может быть сделать еще одну программу. Юзеру дать ссылку на эту программу. Юзер запустит эту программу и уже эта программа даст юзеру в браузер txt-файл. В этом случае может быть тогда можно применить функцию header()?

Как такое можно сделать? С чего начать?
Kusss
пропиши, одно из значений, в файл который выводит текст в браузер.
header('Content-Type: text/html; charset=utf-8', true);	
header('Content-Type: text/html; charset=cp1251', true);

можно ещё вот так попробовать записать текст. который будет в кириллице.
//$text - тут твой текст 
$file_path=$_SERVER['DOCUMENT_ROOT'].'/test.txt';
$text = htmlspecialchars($text, ENT_QUOTES, 'cp1251')."\r\n";
$handle = fopen($file_path, "a+");
@flock ($handle, LOCK_EX);
fwrite ($handle, $text);
fwrite ($handle, date('d.m.Y H:i:s')."\r\n");
@flock ($handle, LOCK_UN);
fclose($handle);
Ekonom
Kusss, у меня текстовый файл сам по себе. Программа в него записывает данные, но не отображает текстовый файл в браузере.
Текстовый файл просто лежит на диске в интернете и я дал юзеру ссылку на него.
Ekonom
Вот такая программа переходит в txt-файл, но браузер кодировку не использует из функции header():
<?php

Main_Module1();

function Main_Module1()
{
header('Content-Type: text/html; charset=utf-8', true);
$FN = 'https://site.ru/result.txt';
header ('Location: ' . $FN);
}

?>
kaww
Цитата (Ekonom @ 24.06.2017 - 20:14)
но браузер кодировку не использует из функции header()

Использует. Но затем ты перенаправляешь его на новую страницу (header ('Location: ' . $FN)), на которой не задаешь кодировку. В таком случае браузер сам выбирает какую использовать и он может ошибиться в своем выборе. Возможно, за тебя заголовок с кодировкой отправляет веб сервер и берет ее (кодировку) из своих настроек. Так, если используешь apache, то можешь указать нужную кодировку в параметре AddDefaultCharset.
Ekonom
kaww, а как в программе (из сообщения за 24.06.2017 - 17:14) передать кодировку?
kaww
Если не подходит вариант с настройкой сервера, то можно сделать так:
header('Content-Type: text/html; charset=utf-8', true);
readfile('result.txt');

http://php.net/manual/ru/function.readfile.php
Ekonom
kaww, в этом случае как такового текстового файла нет, в таком случае можно использовать html-файл.
А вот как сделать, чтобы у юзера был текстовый файл в браузере и он мог его скачать?
Ekonom
Вопрос модератором. Мне не приходят уведомления о новых сообщениях в этой теме. Пришло только первое.
Как сделать, чтобы приходили уведомления? А то приходится держать в браузере форум и обновлять, чтобы проверять, появились новые темы или нет.
Kusss
можно выдать страницу, на которой будет некоторое количество текста из файла , и ссылка скачать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.