Проблема с кодировкой

Статус
В этой теме нельзя размещать новые ответы.

FiMko

Новичок
Проблема с кодировкой

Добрый день.

Пробовал искать ответа в сети и на на форуме, не помогло.
У меня проблема такого рода: есть Страница в кодировке win1251 и Страница в кодировке utf8

Содержимое страницы win1251 (сохранена в кодировке ANSI):
PHP:
<META content="text/html"; charset="windows-1251" http-equiv="Content-Type">
<?php setlocale(LC_ALL, "ru_RU.CP1251");
	print("Это просто текст");
?>
Содержимое страницы utf8 (сохранена в кодировке UTF-8):
PHP:
<META content="text/html"; charset="utf8" http-equiv="Content-Type">
<?php setlocale(LC_ALL, "UTF8");
	print("Это просто текст");
?>
В первом случае нормальное отображение текста возможно только после ручного переключения на кодировку windows-1251 из браузера, во втором случае (для странцы в utf8) всегда вопросики.

Кто-нибудь может подсказать как это исправить? Заранее большое спасибо!
 

Фанат

oncle terrible
Команда форума
непонятно, при чем здесь локаль.
кодировку текста браузер берет из HTTP заголовка.
HTTP заголовки в пхп посылаются командой Header()

-~{}~ 12.05.09 16:46:

меты, кстати, очень забавные.
 

FiMko

Новичок
Автор оригинала: *****
непонятно, при чем здесь локаль.
кодировку текста браузер берет из HTTP заголовка.
HTTP заголовки в пхп посылаются командой Header()
header() is used to send a raw HTTP header.
А как ее увязать с кодировками?
Автор оригинала: ***** меты, кстати, очень забавные.
Имеется в виду charset="win1251" и charset="utf-8"? Поправил, проблема осталась :(
 

Фанат

oncle terrible
Команда форума
нет. имеется в виду другое. ты бы не отсебятину писал, а скопировал откуда-нибудь что ли.
А как ее увязать с кодировками?
послать соответствующий заголовок с нужной кодировкой
 

FiMko

Новичок
Автор оригинала: *****
нет. имеется в виду другое. ты бы не отсебятину писал, а скопировал откуда-нибудь что ли.
понял.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
послать соответствующий заголовок с нужной кодировкой
Это работает (кодировка самого файла по-прежнему ANSI)
PHP:
<?php header( 'content-type: text/html; charset=windows-1251' );
	print("Это просто текст");
?>
Это не работает (кодировка самого файла по-прежнему utf8)
PHP:
<?php header( 'content-type: text/html; charset=utf-8' );
	print("Это просто текст");
?>
Нет идей почему с utf8 не сработало? Нужна как раз utf8.
 

Фанат

oncle terrible
Команда форума
Идей у нас всегда есть.
правда, они несколько однообразные.
Посмотреть НТТР заголовки. сначала на том сайте, который отдает утф правильно (википедия приходит на ум), а потом у себя.
и сравнить
http://phpfaq.ru/na_tanke , если чо
 

FiMko

Новичок
Автор оригинала: *****
Идей у нас всегда есть.
правда, они несколько однообразные.
Посмотреть НТТР заголовки. сначала на том сайте, который отдает утф правильно (википедия приходит на ум), а потом у себя.
и сравнить
http://phpfaq.ru/na_tanke , если чо
Попробовал, пользовал Веб-сниффер Mozilla.
Вот на этом хостинге utf8.php отображается верно. Content-Type: text/html
Вот Content-Type: text/html; charset=utf-8 для моего ломаного utf8.php на хостинге Peterhost.
Ну и наконец Content-Type: text/html; charset=utf-8 для заглавной страницы wikipedia.
Так что сервер Википедиа и Peterhost отдают одинаково.
 

dimagolov

Новичок
что-то мне подсказывает, что автор нам говорит одно, а в реальности тестирует совсем другое. потому что "?" получаются тогда, когда нету соответствия при конвертации из одной кодировку в другую и просто от файла, сохраненного в "неправильной" кодировке они возникнуть не могут. потому он и тянет свое setlocale, так как она влияет на работу тех ф-й, которые он в реале использует.
 

FiMko

Новичок
Автор оригинала: *****
есть идея. кодировка самого файла не utf8
Вот этот utf8.php в точности тот. Сохранял из notepad++, кодировка UTF-8.
Содержимое файла:
PHP:
<?php header( 'content-type: text/html; charset=utf-8' );
	print("Это просто текст");
?>
Автор оригинала: dimagolov
что-то мне подсказывает, что автор нам говорит одно, а в реальности тестирует совсем другое. потому что "?" получаются тогда, когда нету соответствия при конвертации из одной кодировку в другую и просто от файла, сохраненного в "неправильной" кодировке они возникнуть не могут. потому он и тянет свое setlocale, так как она влияет на работу тех ф-й, которые он в реале использует.
В текущей версии файлов никаких setlocale, что были приведены в начале поста нет.
Настоящее содержимое файла utf8.php:
PHP:
<?php header( 'content-type: text/html; charset=utf-8' );
	print("Это просто текст");
?>
 

SiMM

Новичок
> Вот этот utf8.php в точности тот.
Отображается в браузере как и положено, ибо от сервера в заголовках кодировка не приходит, и клиент вынужден смотреть её в HTML'е.
А почему не приходит кодировка в хидере - можно узнать из соответствующего FAQ, после того, как будут выполнены требования FAQ: debug.
 

FiMko

Новичок
Автор оригинала: *****
да какая разница, где ты сохранял. проверь.
Проверял. Пересохранял из других редакторов.
Помогло в итоге вот такое решение (подсказали):
PHP:
<?php
	error_reporting(E_ALL);
	ob_start(); // включить буферизацию вывода
	ob_implicit_flush(0); // отключить неявную очистку

	$hello = 'Привет';
	$world = 'мир';

	echo $hello.', '.$world;

	// конвертируем
	$flush = iconv('WINDOWS-1251', 'UTF-8',
		ob_get_contents() // получить содержимое буфера
	);
	ob_end_clean(); // очистить содержимое буфера

	echo $flush;
?>
PS: все же это больше походит на workaround, так в чем же была проблема, неужели действительно файл не в utf-8 был?
 

Фанат

oncle terrible
Команда форума
гыгыгыгыгы
ну а сам-то как думаешь, на этот код глядючи?
что, по-твоему, делает строчка iconv('WINDOWS-1251', 'UTF-8'?
 

FiMko

Новичок
Автор оригинала: *****
гыгыгыгыгы
ну а сам-то как думаешь, на этот код глядючи?
что, по-твоему, делает строчка iconv('WINDOWS-1251', 'UTF-8'?
Комменты я расставлял, файл исходника в ANSI, пишем в буфер, перегоняем вывод в utf-8, пишем вывод, чистим буфер. Я так понимаю, что файл (utf8.php) был все же не в той кодировке, не прав? Если да, тогда вопрос, из чего же сохранять файлы, каким софтом, какой пользовал я писал.
 

Фанат

oncle terrible
Команда форума
я не знаю, у меня в утф нету файлов.
думаю, правильнее разобраться с текущим, чем другой искать

-~{}~ 12.05.09 22:33:

Думаю, прав dimagolov.
Нужно просто больше порядка в действиях. Ведь на каком-то там хостинге файл отображался верно?
 

FiMko

Новичок
Автор оригинала: Фaнaт
я не знаю, у меня в утф нету файлов.
Файлы utf делаются, я их делаю в текстовых редакторах, как я писал пробовал в нескольких.

Автор оригинала: Фaнaт
Думаю, прав dimagolov.
Нужно просто больше порядка в действиях. Ведь на каком-то там хостинге файл отображался верно?
Порядок в первую очередь должен быть в голове, у меня его там по этому вопросу пока так и нет. До сих пор непонятно отчего копать.
К тому же, судя по тому, что пишет dimagolov, дело вовсе не в кодировке файла:
Автор оригинала: dimаgоlоv
"?" получаются тогда, когда нету соответствия при конвертации из одной кодировку в другую и просто от файла, сохраненного в "неправильной" кодировке они возникнуть не могут.
Мы же с тобой все гадаем об обратном, была ли неверной кодировка файла.
Автор оригинала: Фaнaт
есть идея. кодировка самого файла не utf8
да какая разница, где ты сохранял. проверь.
Короче, пойду я курить маны наиподробнейшим образом, а пока работает воркэраунд и то слава богу :)
Фaнaт, ребята, спасибо за оказанную помощь!
 

dimagolov

Новичок
FiMko, ты скажи, кому лучше знать, тебе или мне, что у тебя и откуда берется и куда выводится?

ты принципиально этот аспект будешь держать в тайне?

[telepat mode on again]
http://phpfaq.ru/charset
[telepat mode off]
 

FiMko

Новичок
Автор оригинала: dimagolov
FiMko, ты скажи, кому лучше знать, тебе или мне, что у тебя и откуда берется и куда выводится?
Порядок в первую очередь должен быть в голове, у меня его там по этому вопросу пока так и нет. До сих пор непонятно отчего копать.

Автор оригинала: dimagolov
ты принципиально этот аспект будешь держать в тайне?

[telepat mode on again]
http://phpfaq.ru/charset
[telepat mode off]
Какой аспект :confused: ?
Зачем кинул ссылку "Проблемы с кодировкой в MySQL версий 4.1+", причем тут мускул, mysql нет, есть просто .php
 

Фанат

oncle terrible
Команда форума
dimagolov, у него тестовая ж вроде страница

FiMko, мануалы-то читать нет смысла имхо. тут с редактором надо разбираться
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху