Если содержимое iframe формировать через document.write, браузер почему-то отображает содержимое в кодировке родительского для iframe документа. Писал об этом в первом посте.
|
Цитата:
Например: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> И.т.д. ... 2. Есть возможность через XMLHttpRequest получать документ в желаемой кодировке, поищите где нидь тут https://developer.mozilla.org/ru/docs/XMLHttpRequest 3.Вы во фрейме втыкаете в контент, а нужно через write вписывать полный контекст документа(вместе шапкой и хидером) перезаписывать в пустой фрейм, я показал как ранее(используя имя фрейма) 4. Есть уверенность что символы уже не обрезаны при получении контента ? ( Т.е. символы кракозябров имеют не один и тот же код ? попробуйте просмотреть коды нескольких символов подряд 5. Код заголовка шапки и хидера вставляемый во фрейм должен быть тоже закодирован и вставляем в той же кодировке, что и контент, сохранить в тектовый документ в нужной(желаемой) кодировке, скопировать и вставить на страницу (или в блокнот) с utf-8 - cкопировать и вставить в скрипт переменную. Геммор ещё тот, проще взять кодер-декодер utf-8 в windows-1251 (Где то тут на форуме решал подобную задачу, отправку поискового запроса Аяксом трансформируя текст (прописанного яваскрипт переменной), т.е.UTF-8 в windows-1251 |
1. Вот пример вставляемого кода из первого поста:
<!doctype html> <html> <head> <meta charset="windows-1251"> </head> <body> <p>Строка в кодировке windows-1251.</p> </body> </html>Здесь есть и doctype, и head, и meta charset, и body. К слову, код в формате XHTML вставлять тоже пробовал - разницы никакой. 2. С получением кода в другой кодировке проблем нет. 3. Тестовый код идентичен тому, что вы показывали. Смотрим первый пост. 4. Такая уверенность есть. Проверялось переключением кодировки в браузере. То есть если переключить кодировку в браузере на кодировку вставляемой строки, кракозябры пропадают. 5. Чтобы кодировки не слетели от копирования, тестовый пример генерирую php-скриптом. То есть этот подвох учитывается. |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p>Это родительская страница в UTF, с сайтом в кодировке CP1251 загруженным во фрейм</p> <iframe src="http://winrus.com/cpage_r.htm" width="600" height="400"></iframe> </body> </html> И как, проблемы есть? |
laimas, проблемы есть, речь идет о динамическом формировании содержимого iframe, которое почему-то не работает также как в вашем примере.
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <script> $(function() { $('<iframe/>').appendTo('body').css({width : 600, height : 400}).attr('src', 'http://winrus.com/cpage_r.htm') }); </script> </head> <body> <p>Вы лучше поясните чем вы занимаетесь, ибо суть поста "неизвестная кодировка", а документу фрейма кодировку то нужно указывать. Так ли она неизвестна тогда?</p> <p>Динамическое добавление фрейма не определяет кодировку его документа, кодировка определяется в документе загруженном в него.</p> </body> </html> |
Есть же конкретная задача, содержимое iframe нужно сформировать из строки. О том, что через src работает, я писал сразу. Похоже, тема совсем безнадежная, столько ответов и даже с условиями задачи толком не разобрались.
|
Еще раз - кодировку документа в iframe вы должны указать (это сделать можно, как и записать в бланк изначально загруженный что угодно). Если вы должны, то кодировка этой строки должна быть вам известна. Вы же пишите, что она не известна. И если это всего лишь строка, то не понятно чего вы до сих пор паритесь, не конвертируя ее в кодировку с которой работает страница, а паритесь с фреймом.
|
Как указать кодировку iframe, если meta charset игнорируется браузером во вставляемой строке? О заведомо неизвестной кодировке пишется для того, чтобы решение не было привязано к этой кодировке, это не значит, что она не указана в теле вставляемой строки. Смотрим мой пример кода.
|
Цитата:
Значит пусть сервер отдает страницу, и либо в мета, либо заголовками вы определяете ее кодировку и пусть это будет UTF. Значит и скрипт этот должен сохраняться в UTF. Пусть на этой же странице есть некий js-сценарий, в котором вы пытаетесь записать в создаваемый iframe (что в общем то не важно, он может уже и быть на странице) слово "тест". В какой кодировке будет это слово? Также в UTF, так как оно отдано одним потоком скриптом в utf и объявленной utf кодировкой. То есть, нечто иной кодировки как переменная должно получаться отдельным запросом. И пусть это у вас выполняется. Тогда: $(создаем и помещаем на страницу iframe, указав в качестве src "about:blank").load(function() { //вот так можно получить head фрейма $(this.contentWindow.document.head) //чисто на jQ, это .content() //в котором можно объявить кодировку вставив метатег charset //соответственно тело документа $(this.contentWindow.document.body) //куда можете записывать свои строки или что угодно }) |
Часовой пояс GMT +3, время: 01:40. |