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

Форум PHP

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

 

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

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

тема: Корректная перекодировка.
 
 автор: Владимир55   (10.07.2012 в 23:05)   письмо автору
 
 

Скрипт работает в кодировке 1251, хотя из базы считывается информация в кодировке UTF-8. Я пошел на это сознательно, но не учел, что в тексте реально могут встретиться знаки, отсутствующие в колировке 1251. Вроде бы, технический текст, откуда там экзотика? Но оказалось несколько букв вида «О» и «Е» с точками сверху, каждую из которых iconv превращает в ДВЕ закорючки.

Можно ли как-то исправить дело?

(Скрипт будет использоваться на сервере, поэтому номенклатура возможных вариантов ограничивается типовыми решениями, не требующими перенастройки РНР).

  Ответить  
 
 автор: cheops   (11.07.2012 в 08:05)   письмо автору
 
   для: Владимир55   (10.07.2012 в 23:05)
 

Хм... проблема 8-байтовой кодировки в том, что она может кодировать только 256 символов, первые 128 символов стандарные и одинаковые во всех кодировках, национальные символы вынесены во вторые 128 символов. Проблема в том, что больше символов не закодировать, чтобы рядом с русским текстом отобразить буквы с умлаутами нужно переключать кодировку. Чтобы её не переключать, ввели многобайтовые кодировки и в частности UTF-8.

  Ответить  
 
 автор: Владимир55   (11.07.2012 в 09:42)   письмо автору
 
   для: cheops   (11.07.2012 в 08:05)
 

Оно конечно - в 1251 впихнуть все символы UTF-8 невозможно. Но вполне реально сделать это по упрощенной схеме: "Е" с точками заменить на "Е", "О" с точками заменить на "О" и т.п. Всего с десяток замен, не больше.

Можно ли задать такое условие в функцию iconv ?

Или замену придется сделать до перекодировки посредством str_replace ? Но работает ли str_replace с UTF-8 ?

  Ответить  
 
 автор: cheops   (11.07.2012 в 10:08)   письмо автору
 
   для: Владимир55   (11.07.2012 в 09:42)
 

>Но вполне реально сделать это по упрощенной схеме: "Е" с точками заменить на "Е", "О" с
>точками заменить на "О" и т.п. Всего с десяток замен, не больше.
Получится другая кодировка, которую должен поддерживать браузер. Кодировка - это не более чем правила, которые сообщают вместо какого кода, какой символ должен подставляться. Если вы изменяете эти правила - получается другая кодировка.

  Ответить  
 
 автор: Владимир55   (11.07.2012 в 10:13)   письмо автору
 
   для: cheops   (11.07.2012 в 10:08)
 

"Если вы изменяете эти правила - получается другая кодировка."

Получается, что так.

Но ведь в этом нет никаких проблем - браузер получает код буквы "Е" и воспроизводит её. А до того, что касается её предыстории, и из какого знака она сформировалась, ему нет никакого дела.

Ведь так?

  Ответить  
 
 автор: cheops   (11.07.2012 в 16:44)   письмо автору
 
   для: Владимир55   (11.07.2012 в 10:13)
 

Браузер помимо кода буквы "Е" получает META-тэг или HTTP-заголовок с указанием кодировки. Кодировки для всей страницы. Нет в арсенале HTML или CSS средств, чтобы указать, что вот этот участок страницы в одной кодировке, а вот этот в другой.

PS Самый лучший выход, это использовать HTML-последовательности, подробности в теме http://softtime.ru/forum/read.php?id_forum=1&id_theme=87076

  Ответить  
 
 автор: Владимир55   (11.07.2012 в 21:05)   письмо автору
 
   для: cheops   (11.07.2012 в 16:44)
 

Я понял.

Дело в том, что инфу я получаю из базы. На сервере с ней играю, а в браузер идет страница, на которой знаки только в СР1251.

Спасибо!

  Ответить  
Rambler's Top100
вверх

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