04.06.2016, 07:53
|
Интересующийся
|
|
Регистрация: 01.06.2016
Сообщений: 22
|
|
Если содержимое iframe формировать через document.write, браузер почему-то отображает содержимое в кодировке родительского для iframe документа. Писал об этом в первом посте.
|
|
04.06.2016, 08:12
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от MrBean
|
Если содержимое iframe формировать через document.write, браузер почему-то отображает содержимое в кодировке родительского для iframe документа. Писал об этом в первом посте.
|
Вы заголовок вписываете и с требуемой кодировкой во фрейм ? (Или ток body втыкаете ?
Например:
<!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
Последний раз редактировалось Deff, 04.06.2016 в 08:40.
|
|
04.06.2016, 10:08
|
Интересующийся
|
|
Регистрация: 01.06.2016
Сообщений: 22
|
|
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-скриптом. То есть этот подвох учитывается.
|
|
04.06.2016, 12:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
<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>
И как, проблемы есть?
|
|
04.06.2016, 13:57
|
Интересующийся
|
|
Регистрация: 01.06.2016
Сообщений: 22
|
|
laimas, проблемы есть, речь идет о динамическом формировании содержимого iframe, которое почему-то не работает также как в вашем примере.
|
|
04.06.2016, 15:16
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
<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>
|
|
04.06.2016, 16:02
|
Интересующийся
|
|
Регистрация: 01.06.2016
Сообщений: 22
|
|
Есть же конкретная задача, содержимое iframe нужно сформировать из строки. О том, что через src работает, я писал сразу. Похоже, тема совсем безнадежная, столько ответов и даже с условиями задачи толком не разобрались.
|
|
04.06.2016, 16:08
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Еще раз - кодировку документа в iframe вы должны указать (это сделать можно, как и записать в бланк изначально загруженный что угодно). Если вы должны, то кодировка этой строки должна быть вам известна. Вы же пишите, что она не известна. И если это всего лишь строка, то не понятно чего вы до сих пор паритесь, не конвертируя ее в кодировку с которой работает страница, а паритесь с фреймом.
|
|
04.06.2016, 16:29
|
Интересующийся
|
|
Регистрация: 01.06.2016
Сообщений: 22
|
|
Как указать кодировку iframe, если meta charset игнорируется браузером во вставляемой строке? О заведомо неизвестной кодировке пишется для того, чтобы решение не было привязано к этой кодировке, это не значит, что она не указана в теле вставляемой строки. Смотрим мой пример кода.
|
|
04.06.2016, 16:51
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от MrBean
|
Как указать кодировку 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)
//куда можете записывать свои строки или что угодно
})
Последний раз редактировалось laimas, 04.06.2016 в 17:09.
|
|
|
|