Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по кодировкам
Форумы портала PHP.SU » » Вопросы новичков » Вопрос по кодировкам

Страниц (1): [1]
 

1. createl - 13 Марта, 2012 - 18:37:12 - перейти к сообщению
Совсем запутался с кодировками. Получаю курлом страницу, она содержит русский текст и в браузере этот текст отображается некорректно. Если сохранить полученное в фаил, а потом вручную пересохранить в ansi, то отображается нормально, если выводить командой php. Но опять же, сплошные квадратики, если его открыть файлом хтмл. Я так понял, крякозябры получаются если текст выводимый в браузере, имеет кодировку отличную, от той, которая содержится в мета тегах этого текста. А что тогда ее меняет? Как это исправить? В какой кодировке содержимое, получаемое функций file_get_contents? ANSI и Windows-1251 это одно и то же? И еще интересно, регулярные функции могут также не понять с чем они имеют дело и за счет этого выдавать не то, что в шаблоне?
2. Maxi - 13 Марта, 2012 - 18:56:25 - перейти к сообщению
Попробуй отослать заголовок
$headers = "Content-type: text/plain; charset=windows-1251";
3. Морозов Семен - 14 Марта, 2012 - 21:07:16 - перейти к сообщению
Используйте лучше UTF-8 Она более универсальнее чем windows-1251

Чтобы не выходили кракозябры если вы хотите использовать UTF-8,
то вам сначала необходимо перекодировать все файлы через блокнот.

далее создаёте файл в корневой папке сайта .htaccess , в нем записываете AddDefaultCharset UTF-8

Если вы используете базу данных MySql, то после подключения к ней вам необходимо прописать следующее:

PHP:
скопировать код в буфер обмена
  1. mysql_query("SET character_set_client = utf8");
  2. mysql_query("SET character_set_results = utf8");
  3. mysql_query("SET character_set_connection = utf8");
  4. mysql_query("SET collation_connection = utf8_general_ci");


и в конечном счете в метатеге html записать вот это:

CODE (html):
скопировать код в буфер обмена
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


Вроде и всё...

P.S. там конечно еще есть некоторые моменты которые я пропустил. Но вот эти по крайней мере исправляют многие недочеты
4. UNTRUSTED - 14 Марта, 2012 - 21:19:45 - перейти к сообщению
С этим utf-8 тоже мучался мучался... И оставил все-таки cp-1251
Никак не получалось header(Location:...) запустить!! Насколько я знаю, это потому что utf-8 всегда в начале файла какие-то там символы выводит!!!
Да и зато с cp-1251 у меня вообще пролем никаких!!!
5. jovani - 14 Марта, 2012 - 21:28:15 - перейти к сообщению
При создании приложений php желательно прописать в самом начале следующее выражение
CODE (htmlphp):
скопировать код в буфер обмена
  1. header('Content-Type: text/html; charset=utf-8');

а при обращении к базе данных необходимо прописать те строки, которые указал Морозов Семен
6. createl - 15 Марта, 2012 - 19:41:57 - перейти к сообщению
Maxi пишет:
Попробуй отослать заголовок
$headers = "Content-type: text/plain; charset=windows-1251";

провобовал, не помогло

Много чего перерыл, но что происходит понять не могу. Получаю страницу чужого сайта курлом и она выводится с крякозябрами. Записываем ее в файл при помощи fwrite с расширением htm - два клика и о чудо, в браузере все нормально. Читаю тот же файл echo file_get_contents -- снова иероглифы. Смотрю исходный код в обоих страницах - идентичен. Разве что у страницы, которая при помощи скрипта выводится пустая строка есть в начале. Может кто объяснит из за чего это происходит? Что то php своего чтоли добавляет, что браузер с ума сходит?
7. Maxi - 16 Марта, 2012 - 00:25:07 - перейти к сообщению
createl пишет:
Maxi пишет:
Попробуй отослать заголовок
$headers = "Content-type: text/plain; charset=windows-1251";

провобовал, не помогло

Много чего перерыл, но что происходит понять не могу. Получаю страницу чужого сайта курлом и она выводится с крякозябрами. Записываем ее в файл при помощи fwrite с расширением htm - два клика и о чудо, в браузере все нормально. Читаю тот же файл echo file_get_contents -- снова иероглифы. Смотрю исходный код в обоих страницах - идентичен. Разве что у страницы, которая при помощи скрипта выводится пустая строка есть в начале. Может кто объяснит из за чего это происходит? Что то php своего чтоли добавляет, что браузер с ума сходит?


А сама кодировка в браузере какая указана?
8. createl - 16 Марта, 2012 - 04:39:57 - перейти к сообщению
Maxi пишет:



А сама кодировка в браузере какая указана?


В настройках браузера по умолчанию windows-1251. В мета тегах получаемой страницы стоит utf-8. Кстати, если получать курлом страницу другого какого-нибудь сайта, который присылает страницу, где в метах прописано windows 1251, даже через скрипт все отображается нормально. А если убрать метатег utf-8 в сохраненной страничке с расширением htm, то тогда тоже иероглифы(то есть ясно прописано какая кодировка должна быть, но браузер упорно отказывается этому внимать в случае работы скрипта - причем любой браузер).
9. UNTRUSTED - 16 Марта, 2012 - 05:29:59 - перейти к сообщению
Морозов Семен пишет:
и в конечном счете в метатеге html записать вот это:
CODE (html):
скопировать код в буфер обмена
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Браузеры уже давно meta теги игнорят!
10. shabalin - 16 Марта, 2012 - 05:58:42 - перейти к сообщению
UNTRUSTED пишет:
Браузеры уже давно meta теги игнорят!

Не игнорят. Хотя приоритет у них и ниже, чем HTTP-заголовки.

createl, У вас скорее всего проблема в том, что страница, которую вы получаете с чужого сайта - в кодировке, отличной от вашей. Вам нужно узнать по заголовкам, какая кодировка у той страницы и переконвертировать страницу в вашу кодировку, будть то Windows-1251 или UTF-8.

Например, если у удаленной страницы кодировка UTF-8, а у вас, как я понял, Windows-1251, то код будет таким:

PHP:
скопировать код в буфер обмена
  1. $content = iconv('UTF-8', 'WINDOWS-1251//IGNORE', $content);


* Предполагается, что $content - это то, что вы получили от курла.
11. createl - 23 Марта, 2012 - 20:34:13 - перейти к сообщению
shabalin пишет:
createl, У вас скорее всего проблема в том, что страница, которую вы получаете с чужого сайта - в кодировке, отличной от вашей. Вам нужно узнать по заголовкам, какая кодировка у той страницы и переконвертировать страницу в вашу кодировку, будть то Windows-1251 или UTF-8.

Ура, добрался до PHP наконец. Действительно так и я кажется понял, что к чему в этих кодировках. Спасибо всем, особенно shabalin и Морозову Семену (за вариант с .htaccess)

 

Powered by ExBB FM 1.0 RC1