Друзья, помогите, плиз. Имею текстовый файл на клиенте, сохранен в utf-8. Закачиваю его на сервер. Там (встроенный редактор на сервере) он отображается примерно так: п»ї"01.12.2006, 19:00 |Артем Бетев Через месяц СЃРЅРѕРІР° вступят Имеется также такой скрипт: header("Content-Type: text/html; charset=UTF-8"); mb_internal_encoding("UTF-8"); $str = file_get_contents("../scripts/2.txt"); echo $str . "<br />"; echo $str[25]; Первое эхо выводит удобоваримый текст. Второе выдает: � В чем тут может быть засада?
Сохраните страницу не просто в UTF-8, а UTF-8 без BOM. Первые символы (п»ї) говорят о том, что маркер у вас присутствует.
Если вы не прописываете текст статично, а получаете данные из БД, файла и т.д., то скорее всего, что исходная кодировка cp1251. Если данные из базы, то установите сранение полей "utf8_general_ci". Но для начала, попробуйте указать кодировку из php: после подключения к базе, выполните запрос: Код (Text): SET NAMES utf-8 P.S. Не помешает еще в htaccess прописать строку: Код (Text): AddDefaultCharset UTF-8
Текст беру из файла. Специально перекодировал его в utf-8 без бом. В базу он, кстати, записался корректно, там кодировка utf-8. htaccess отредактировал. Результат прежний (( Добавлено спустя 1 минуту 2 секунды: А как задать кодировку скрипта на сервере?
Код (PHP): mb_internal_encoding('UTF-8'); Я вообще говорил о файле-обработчике или документе, который выводит данные на экран.
сначала надо поставить диагноз, потом лечить. я уверен, что твой "встроенный редактор на сервере" показывает тебе текст в кодировке windows-1251. при этом данные на самом деле в utf-8, просто браузер об этом не догадывается ))) это несложно проверить заглянув в инфу о странице в браузере. глянь и расскажи что увидел. какая кодировка выбрана браузером?
Абсолютно верно. Добавлено спустя 18 минут 30 секунд: Такс, если загрузить на сервер текстовый файл в windows-1251, и оставить в скрипте только вот это: $str = file_get_contents("../scripts/2.txt"); echo $str . "<br />"; echo $str[35]; то все отображается корректно, и даже вот эта функция делает то, что от нее хотят: echo "up: " . mb_strtoupper($str[35]) . "<br />"; а в чем же была засада? где-то еще надо было прописывать utf-8? или эта windows-1251 где-то на сервере вшита намертво, и ее не победить?
ты скажи что это блеать за "встроенный редактор"? в админке хостинга чтоли? если так, просто забей на это. такая админка не годится для реальной жизни. просто выкладывай правильные файлы и получай правильный результат. кривожопая адмника хостинга это недостаточная причина, чтобы портить свои скрипты. Добавлено спустя 3 минуты 52 секунды: это допустимо только для однобайтовых кодировок. в мультибайтовых (как utf-8) только символы латиницы занимают один байт, а буквы других алфавитов — от двух до четырех байт на символ. поэтому правильнее будет писать так: mb_substr($str, 35, 1)
еще важно: чтобы мультибайтовые функции работали везде правильно, надо где-то в начале делать Код (PHP): mb_internal_encoding('UTF-8'); в новых версиях PHP вроде это поведение по-умолчанию, но в старых без этого будут глюки.