|
|
|
| Скрипт работает в кодировке 1251, хотя из базы считывается информация в кодировке UTF-8. Я пошел на это сознательно, но не учел, что в тексте реально могут встретиться знаки, отсутствующие в колировке 1251. Вроде бы, технический текст, откуда там экзотика? Но оказалось несколько букв вида «О» и «Е» с точками сверху, каждую из которых iconv превращает в ДВЕ закорючки.
Можно ли как-то исправить дело?
(Скрипт будет использоваться на сервере, поэтому номенклатура возможных вариантов ограничивается типовыми решениями, не требующими перенастройки РНР). | |
|
|
|
|
|
|
|
для: Владимир55
(10.07.2012 в 23:05)
| | Хм... проблема 8-байтовой кодировки в том, что она может кодировать только 256 символов, первые 128 символов стандарные и одинаковые во всех кодировках, национальные символы вынесены во вторые 128 символов. Проблема в том, что больше символов не закодировать, чтобы рядом с русским текстом отобразить буквы с умлаутами нужно переключать кодировку. Чтобы её не переключать, ввели многобайтовые кодировки и в частности UTF-8. | |
|
|
|
|
|
|
|
для: cheops
(11.07.2012 в 08:05)
| | Оно конечно - в 1251 впихнуть все символы UTF-8 невозможно. Но вполне реально сделать это по упрощенной схеме: "Е" с точками заменить на "Е", "О" с точками заменить на "О" и т.п. Всего с десяток замен, не больше.
Можно ли задать такое условие в функцию iconv ?
Или замену придется сделать до перекодировки посредством str_replace ? Но работает ли str_replace с UTF-8 ? | |
|
|
|
|
|
|
|
для: Владимир55
(11.07.2012 в 09:42)
| | >Но вполне реально сделать это по упрощенной схеме: "Е" с точками заменить на "Е", "О" с
>точками заменить на "О" и т.п. Всего с десяток замен, не больше.
Получится другая кодировка, которую должен поддерживать браузер. Кодировка - это не более чем правила, которые сообщают вместо какого кода, какой символ должен подставляться. Если вы изменяете эти правила - получается другая кодировка. | |
|
|
|
|
|
|
|
для: cheops
(11.07.2012 в 10:08)
| | "Если вы изменяете эти правила - получается другая кодировка."
Получается, что так.
Но ведь в этом нет никаких проблем - браузер получает код буквы "Е" и воспроизводит её. А до того, что касается её предыстории, и из какого знака она сформировалась, ему нет никакого дела.
Ведь так? | |
|
|
|
|
|
|
|
для: Владимир55
(11.07.2012 в 10:13)
| | Браузер помимо кода буквы "Е" получает META-тэг или HTTP-заголовок с указанием кодировки. Кодировки для всей страницы. Нет в арсенале HTML или CSS средств, чтобы указать, что вот этот участок страницы в одной кодировке, а вот этот в другой.
PS Самый лучший выход, это использовать HTML-последовательности, подробности в теме http://softtime.ru/forum/read.php?id_forum=1&id_theme=87076 | |
|
|
|
|
|
|
|
для: cheops
(11.07.2012 в 16:44)
| | Я понял.
Дело в том, что инфу я получаю из базы. На сервере с ней играю, а в браузер идет страница, на которой знаки только в СР1251.
Спасибо! | |
|
|
|