| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Изменение кодировки при помощи iconv |
| Автор: cardinal 5.10.2009, 23:20 | ||
А на выходе только öäüßzeile1. То есть вторая строка не выдается вообще (вторая функция ничего не возвращает). Не понимаю почему... |
| Автор: cardinal 6.10.2009, 00:24 |
| unicross, спасибо. При помощи //IGNORE получил öäüßzeile1zeile2 То есть умлауты из UTF-8 в ISO-8859-1 функцией iconv не переделать? Вроде кстати с htmlspecialchars нужный вариант получается, но что-то неуверен... p.s. php я так между делом использую, надо доделать просто одну вещь... |
| Автор: unicross 6.10.2009, 01:32 | ||||||||||
Если эти символы входят в кодировку ISO-8859-1, то можно. UTF-8 способна вместить практически любую кодировку. Поэтому любую однобайтную кодировку можно преобразовать в UTF-8, но при обратной операции могут быть символы, которые не входят в однобайтную кодировку (в данном случае в ISO-8859-1) и они будут проигнорированы при наличии флага //IGNORE. Ведь более 65 тыс. символов не поместятся в 256... В качестве примера создайте файл в кодировке UTF-8 без BOM (например, с помощью Notepad++) со сл. программой:
В результате получим нормальный результат:
Все зависит от кодировки файла в котором находится строка. В вашем случае я так понимаю строки $block_body1 и $block_body2 содержат данные в кодировке ISO-8859-1, а не в UTF-8. Поэтому в первом случае нормальный результат, а во втором - проблемы с символами. Если символы в однобайтную кодировку не входят, то можно преобразовать их в HTML-эквиваленты с помощью функции http://ru2.php.net/manual/en/function.htmlentities.php
Результат
В этом случае символы в кодировку windows-1251 не входят, но мы заменили их на HTML-эквиваленты. |
| Автор: cardinal 6.10.2009, 08:57 |
| Но ведь умлауты есть в http://de.wikipedia.org/wiki/ISO_8859-1? |
| Автор: unicross 6.10.2009, 14:02 |
cardinal, если вы под словом "умлаут" подразмеваете буквы ä, ö и ü, то эти символы присутствуют в кодировке http://ru.wikipedia.org/wiki/ISO_8859-1 и нормально преобразовываются в (из) UTF-8 с помощью iconv() (примеры в моем посте выше, там с этими буквами все нормально). |
| Автор: Ипатьев 6.10.2009, 14:06 |
А что вы от нее ожидали? что вы вообще хотели получить от этой второй строчки? |
| Автор: cardinal 6.10.2009, 19:29 | ||||||
Ипатьев, у меня вот в этом примере (см. выше) не получается нормальный результат. Правда я не понял что такое BOM и еще у меня
То есть сама страница в utf-8, а текст, который вводят на странице надо переделать в iso-8859-1... |
| Автор: unicross 6.10.2009, 19:41 | ||||
http://ru.wikipedia.org/wiki/BOM#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA_.D0.B1.D0.B0.D0.B9.D1.82.D0.BE.D0.B2 - это метка порядка байтов, служебные символы, которые не позволят установить заголовки ответа сервера с помощью функции header(). Блокнот по умолчанию вставляет эти символы.
Нужно выбирать что-то одно или iso-8859-1 или utf-8. Нельзя вывести две кодировки на одну страницу без искажения одной из кодировок. Этот пример абсолютно рабочий... Сама страница в utf-8, а текст, который вводят на странице переделывается в iso-8859-1 и посылается соответствующий заголовок (iso-8859-1, а не utf-8)...
Вот из-за этого и ошибка... |
| Автор: Ипатьев 6.10.2009, 19:58 |
| Странно. Зачем указывать одну кодировку, а текст перекодировать в другую. Если надо переделать текст, который вводят, то при чем здесь вывод? Сдается мне, опять здесь опять тот случай, когда проблема не в решении задачи, а в ее постановке. Осмысленность приводимых примеров кода уменьшается с каждым разом. |
| Автор: cardinal 6.10.2009, 21:22 | ||
То что будет искажение это понятно. Прочитал эти слова и решил пройтись по заголовкам всех страниц. И вот оно, не везде iso-8859-1 указал и поэтому данные с одной страницы на другую передавались не так. Вообщем всем спасибо! Проблема решилась (почти сама собой |