Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Использование кодировки utf8
 
 автор: FireTiger   (24.07.2008 в 00:52)   письмо автору
 
 

Сейчас кодировка utf8 становится все более популярной, становится стандратом.. я думаю это всем известно. Но вот возникают вопросы.. 1. как все-таки правильно, "utf8" или "utf-8"?)) (ну эт не столь важно)
2. Что должна включать в себя полная поддержка utf8 какой-либо CMS? Я так понимаю хранение данных в базе mysql в этой кодировке.. а вот все файлы, которые хранят сценарии и не только (скажем шаблоны), тоже нужно перекодировать в utf8, скажем с ansi?
3. Если будет полная поддрежка utf8, то нужно будет использовать какие-то специальные строковые функции для работы с рус. символами в этой кодировке? Стандартные функции не подойдут? (substr() например)
4. Для чего все-таки нужен mb_string? Что именно он делает?
5. Как сделать запись файла в этой кодировке? А то, fwrite() мне только в ansi сохраняет...
6. Где можно почитать именно о самой кодировке в целом, все принципы кодирования и т.п.? А то в инете нахожу только проблемы возникающие при работе с этой кодировкой, а толкового описания нет.

   
 
 автор: sms-send   (24.07.2008 в 01:09)   письмо автору
 
   для: FireTiger   (24.07.2008 в 00:52)
 

3. Функции из mb_string, iconv
4. mb_string (Multibyte String) умеет работать со строками в многобайтных кодировках, в том числе со строками в UTF-8.
Стандартные же функции рассчитаны на работу с однобайтной кодировкой.

strlen - возвращает кол-во байт (только для однобайтных кодировок это значение совпадает с количеством символов).
mb_strlen - возвращает кол-во символов.

5. Так же как и в любой другой кодировке. Функция fwrite записывает то, что получает во втором параметре, там может быть любая последовательность байт.
6. http://ru.wikipedia.org/wiki/UTF-8

   
 
 автор: FireTiger   (24.07.2008 в 01:35)   письмо автору
 
   для: sms-send   (24.07.2008 в 01:09)
 

Спасибо Вам за помощь, но вот еще хочу спросить. Все русские символы мне всегда нужно как-то кодировать в скрипте? Например, я хочу проверить данные на допустимые символы вот так:

<?php
if (!preg_match("/^[a-zа-я0-9\s]+$/i"$source)) {
              ...
          }
?>

Но вот если строка $source будет состоять из русских символов, то функция не срабатывает... в чем-то есть ошибка... скорее в моем не понимании всей сути кодировок))), но все-таки, как правильно работать с русскими символами в этой кодировке?

   
 
 автор: Trianon   (24.07.2008 в 01:41)   письмо автору
 
   для: FireTiger   (24.07.2008 в 01:35)
 

Чтобы PСRE работали с utf-8 , в шаблоне нужно ставить в хвост специальный модификатор u.

   
 
 автор: sp10   (24.07.2008 в 01:43)   письмо автору
 
   для: FireTiger   (24.07.2008 в 01:35)
 

Ну вы даете)))
Ниже же написал, что нужно добавить флаг u.

   
 
 автор: FireTiger   (24.07.2008 в 01:54)   письмо автору
 
   для: sp10   (24.07.2008 в 01:43)
 

Прикиньте, я прочитал ваше сообщение внимательно, поставил флаг u и ничего не сработало! Вот и спросил! Может я что-то не так сделал, но ... где тут можно ошибится?

<?php
if (!preg_match("/^[a-zа-я0-9\s]+$/ui"$source)) {
             ...
          } 
?>


Warning: preg_match(): Compilation failed: invalid UTF-8 string at offset 6 in

   
 
 автор: FireTiger   (24.07.2008 в 10:58)   письмо автору
 
   для: sp10   (24.07.2008 в 01:43)
 

Почему не работает даже такой метод? Какой есть выход?
Плз, нужно разобратсья

   
 
 автор: sp10   (24.07.2008 в 14:35)   письмо автору
 
   для: FireTiger   (24.07.2008 в 10:58)
 

Код, который вы привели у меня не вызывает ошибки.
Я ради эксперимента сохранил страницу в формате ANSI, и, как вы думаете? Возвращает эту же ошибку.
Если используете Dreamweaver, измените Edit->Preferences->New Document->Default Encoding на UTF-8 и заново создайте скрипт - никакой ошибки не будет.

   
 
 автор: Trianon   (24.07.2008 в 15:14)   письмо автору
 
   для: FireTiger   (24.07.2008 в 10:58)
 

У вас сам скрипт в какой кодировке сохранен?

   
 
 автор: sp10   (24.07.2008 в 01:21)   письмо автору
 
   для: FireTiger   (24.07.2008 в 00:52)
 

Во-первых, в начале скрипта нужно вписать такое:
header('Content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8');

Первый обеспечит то, что браузер корректно обработает входящие данные в utf-8. А второй обеспечит работу с функциями mb_...: strlen, strpos, strrpos, substr, strtolower, strtoupper, substr_sount, send_mail. Если данные у вас в utf-8, обычные строковые функции обработают их некорректно.
И ещё семейство mb_ereg, но вместо него лучше использовать обычные preg, но с добавлением флага u.
В базе данных выбирайте кодировку utf_unicode_ci.
Если используете много инклудов, могут быть проблемы в IE. Поменяйте шрифт на Tahoma. В некоторых языках корректное отображение данных в utf-8 возможно только в этом шрифте. Устранение этой проблемы обещают в PHP6.

   
 
 автор: sms-send   (24.07.2008 в 01:26)   письмо автору
 
   для: sp10   (24.07.2008 в 01:21)
 

Инклуды и IE как связаны?
И проблемы со шрифтами браузера с PHP?))

   
 
 автор: sp10   (24.07.2008 в 01:35)   письмо автору
 
   для: sms-send   (24.07.2008 в 01:26)
 

IE, если использовать шаблонную структуру с множеством include_once, при написании PHP-файлов в utf-8, отображает квадратики вместо русских, да и вообще многих неанглийских символов.
Вот нашел эту страницу, когда столкнудся с этой проблемой:
http://forum.dklab.ru/viewtopic.php?p=85211

   
 
 автор: sms-send   (24.07.2008 в 01:42)   письмо автору
 
   для: sp10   (24.07.2008 в 01:35)
 

Это проблема не PHP, а редакторов, которые вставляют в строку UTF-8 метку BOM, она попадает перед стартовым тегом <?php и заставляет сервер отправлять заголовки и начать вывод тела страницы. Просто нужно отказаться от такой медвежьей услуги (я про вставку BOM), либо выбрать другой редактор.

   
 
 автор: sp10   (24.07.2008 в 01:56)   письмо автору
 
   для: sms-send   (24.07.2008 в 01:42)
 

В языках, где используются буквы с закорючками (скандинавские, тюркские) IE не отображает эти буквы - сплошь квадратики. Даже писал на Блокноте - не помогало. Решение нашел на одном из форумов - используйте Tahoma в CSS в качестве дефолтного шрифта. И это единственное решение для таких ситуаций.

   
 
 автор: sms-send   (24.07.2008 в 02:04)   письмо автору
 
   для: sp10   (24.07.2008 в 01:56)
 

Наверно, всё-таки это проблема IE, а не PHP.

   
 
 автор: Trianon   (24.07.2008 в 02:17)   письмо автору
 
   для: sp10   (24.07.2008 в 01:56)
 

Вероятно, на компьютерах пользователей, для которых эти языки нативны, и IE будет работать.
Хотя sms-send прав, на нем свет уже давно клином не сходится.

   
 
 автор: sp10   (24.07.2008 в 01:39)   письмо автору
 
   для: sms-send   (24.07.2008 в 01:26)
 

И проблемы со шрифтами браузера с PHP?))

Поверьте, могут быть связаны.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования