Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отобразить страницу с одной кодировкой на странице с другой кодировкой (https://javascript.ru/forum/misc/63374-otobrazit-stranicu-s-odnojj-kodirovkojj-na-stranice-s-drugojj-kodirovkojj.html)

MrBean 04.06.2016 07:53

Если содержимое iframe формировать через document.write, браузер почему-то отображает содержимое в кодировке родительского для iframe документа. Писал об этом в первом посте.

Deff 04.06.2016 08:12

Цитата:

Сообщение от 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

MrBean 04.06.2016 10:08

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-скриптом. То есть этот подвох учитывается.

laimas 04.06.2016 12:54

<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>


И как, проблемы есть?

MrBean 04.06.2016 13:57

laimas, проблемы есть, речь идет о динамическом формировании содержимого iframe, которое почему-то не работает также как в вашем примере.

laimas 04.06.2016 15:16

<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>

MrBean 04.06.2016 16:02

Есть же конкретная задача, содержимое iframe нужно сформировать из строки. О том, что через src работает, я писал сразу. Похоже, тема совсем безнадежная, столько ответов и даже с условиями задачи толком не разобрались.

laimas 04.06.2016 16:08

Еще раз - кодировку документа в iframe вы должны указать (это сделать можно, как и записать в бланк изначально загруженный что угодно). Если вы должны, то кодировка этой строки должна быть вам известна. Вы же пишите, что она не известна. И если это всего лишь строка, то не понятно чего вы до сих пор паритесь, не конвертируя ее в кодировку с которой работает страница, а паритесь с фреймом.

MrBean 04.06.2016 16:29

Как указать кодировку iframe, если meta charset игнорируется браузером во вставляемой строке? О заведомо неизвестной кодировке пишется для того, чтобы решение не было привязано к этой кодировке, это не значит, что она не указана в теле вставляемой строки. Смотрим мой пример кода.

laimas 04.06.2016 16:51

Цитата:

Сообщение от 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)
    //куда можете записывать свои строки или что угодно
})


Часовой пояс GMT +3, время: 04:29.