За последние 24 часа нас посетили 23625 программистов и 1524 робота. Сейчас ищут 847 программистов ...

Кодировка. Denwer

Тема в разделе "PHP для новичков", создана пользователем iNEEdhLw, 3 янв 2015.

  1. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    ну, сразу и насчет кодировки обращусь за помощью.
    пользуюсь при написании кода NetBeans IDE (у проекта по умолчанию стоит кодировка UTF-8), хромом и денвером, так же задал в начале php-скрипта заголовок:
    Код (Text):
    1. header('Content-type: text/html; charset=utf-8');
    но результат моего мини-цикла такой:
    [​IMG]

    Добавлено спустя 29 секунд:
    то есть русские символы не воспринимаются здраво.
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а вывод символов как происходит??
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ответ не по теме, используй Open Server, портируемая штука, распаковал и сразу пашет, не создает ни каких виртуальных дисков, оконное управление, вообщем крутая штука.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Больше кода, пожалуйста! Странные проблемы у людей возникают...
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Попробуйте в .htaccess добавить строку:
    Код (Text):
    1. AddDefaultCharset UTF-8
    И поддержу VLK - Denwer мёртвый проект, да и качество этой сборки оставляет желать лучшего. Используйте Open Server.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    похожая фигня возникает когда мультибайтные строки режут немультибайтным способом. так что, наверное, денвер не виноват, только руки ;)
     
  7. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Если вручную переключить в браузере кодировку на utf становится нормально?

    Для беспроблемной работы кодировку надо указывать везде-везде и в заголовке, и в теге <meta>
    и в локали PHP setlocale(LC_ALL, 'ru_RU.UTF-8'); и в htaccess AddDefaultCharset UTF-8; при создании таблиц в БД и при подключении к БД.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    iNEEdhLw, open-server.ru попробуй или ещё лучше установи linux на виртуальную машину
     
  9. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    файл .htaccess у меня лежал в 3 разных папках, которые на мой взгляд нечего там решать не могли, но я все же вставил туда
    Код (Text):
    1. AddDefaultCharset UTF-8
    строку, которую предложил товарищ Deonis, а также создал .htaccess.txt в папке ../www, в которой лежат файлы сайта, но результат не изменился.
    сам код выглядит так:
    Код (Text):
    1. header('Content-type: text/html; charset=utf-8');
    2. $str = 'абвгд';
    3. for ($i=0; $i < strlen($str); $i++)
    4. {
    5.     echo $str[$i]."<br>";
    6. }
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    в этом косяк. поменяй на иноземные буквы, все будет работать, а если отечественные то не будет.
     
  11. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    не понял тебя. я понимаю, что латиница отобразиться правильно, но мне необходимо правильное отображение и кириллицы.
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    С мультибайтовыми строками индексирование не работает. Нужно использовать mb_substr
     
  13. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Чего чего?!
     
  14. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    можешь, пожалуйста, пояснить? не встречал понятия мультибайтовых строк.
    а чего? :(
     
  15. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Всё работает. Достаточно в первом (по глубине) .htaccess.
    PHP-фалы также должны быть в UTF-8, естественно, - т.е. Ваша строка 'абвгд' будет в той кодировке, в какой файл.

    Добавлено спустя 1 минуту 15 секунд:
    Прочитайте цитату, приведённую мной, ещё раз. Не дойдёт - читайте столько раз, пока не дойдёт. ;)
     
  16. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    предполагаю, что проблема в .txt, но не знаю, что должно быть)
     
  17. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Правильно предполагаете.
    Изучайте настройки апача.
     
  18. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    что тут понимать, сделай две строки 'hello' и 'привет', потом воспользуйся методом strlen, который возвращает длину строки и верни длину первой потом второй и посчитай сколько букв в первой и во второй.
    На возникший следом вопрос "как так", я тебе скажу, ну как то так, по другому это не работает. Я предполагаю потому что язык старый.
     
  19. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    о, вот теперь сработало, даже без использования заголовков:
    Код (Text):
    1.  
    2. $str2 = 'абв';
    3. for ($i = 0; $i < strlen($str2); $i++)
    4. {
    5.     echo mb_substr($str2, $i, 1, utf8);
    6.     echo "<br>";
    7. }
    Добавлено спустя 3 минуты 9 секунд:
    всем спасибо, в особенности VLK and Deonis за "разжевовывание"
     
  20. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    нихрена не сработало, включи вывод ошибок и получишь ошибку, потому что strlen($str2) возвращает около 6, а в реальности буквы у тебя всего 3.
     
  21. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    Код (Text):
    1. error_reporting(E_ALL);
    2. ini_set("display_errors", 1);
    3. $str2 = 'абв';
    4. for ($i = 0; $i < strlen($str2); $i++)
    5. {
    6.     echo mb_substr($str2, $i, 1, utf8);
    7.     echo "<br>";
    8. }
    таким образом говорит только за неопределенную константу utf8, но твой посыл понял
     
  22. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
  23. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    насчет mb_strlen уже сообразил, после комментария от VLK, а за корм - спасибо)