Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
21st
Дек
AJAX и кодировка Windows-1251
Posted by Chas under HTML, JavaScript, Статьи
До сей поры работать с AJAX в кодировке WINDOWS-1251 на кириллице было невозможно.
Однако давайте посмотрим в чем же была проблема?
автор: Lesha
Это функция encodeURIComponent(srt) выдает всегда закодированный результат в кодирове UTF8, вне зависимости от кодировки, которой идут в нее передаваемые данные.
Так чтоже нужно зделать чтобы передаваемые данные были в кодировке ANSI ?
Правильно, отказаться от использования этой функции вообще!
Напишем код который принудительно переопределит функцию encodeURIComponent и раз и навсегда заcтавит ее обрабатывать WIN-1251 как положено!
// Инициализируем таблицу перевода
var transAnsiAjaxSys = [];
for (var i = 0x410; i <= 0x44F; i++)
transAnsiAjaxSys[i] = i - 0x350; // А-Яа-я
transAnsiAjaxSys[0x401] = 0xA8; // Ё
transAnsiAjaxSys[0x451] = 0xB8; // ё
// Сохраняем стандартную функцию escape()
//var escapeOrig = window.escape;
// Переопределяем функцию escape()
window.encodeURIComponent = function(str)
{
var ret = [];
// Составляем массив кодов символов, попутно переводим кириллицу
for (var i = 0; i < str.length; i++)
{
var n = str.charCodeAt(i);
if (typeof transAnsiAjaxSys[n] != 'undefined')
n = transAnsiAjaxSys[n];
if (n <= 0xFF)
ret.push(n);
}
return escape(String.fromCharCode.apply(null, ret));
}[/code]
упакуем теперь это в модуль ajax_ansi_func.js
и возмем самый классический пример на Jquery
form.html
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/></head><body>
</head><body>
<!-- система переопределения методов работы для WIN-1251 -->
<script type="text/javascript" src="ajax_ansi_func.js"></script>
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script>
function testgp(d) { document.getElementById('result').innerHTML=d; }
</script>
<form>
Проверка GET
<br>напишите яблоко
<input type=text name=ge><p>
</form>
<button href=# onclick="$.get('proh2.php',{ ge: document.forms[0].ge.value }, testgp); return false;">проверить GET</button>
<form>
Проверка POST
<br>напишите яблоко
<input type=text name=ge><p>
<br>напишите тыква
<input type=text name=ge2><p>
</form>
<button onclick="$.post('proh2.php', $('form').eq(1).serialize(), testgp); return false;">проверить POST</button>
<p id=result></p>
и файл приемник
proh2.php
<?php
header("Content-Type: text/html;charset=windows-1251");
if (isset($_GET["ge"])) { print $_GET["ge"]." пришло"; }
if (isset($_POST["ge"])) { print $_POST["ge"]." и ".$_POST["ge2"]." пришло"; }
скачать пример : http://jqbook.narod.ru/works/ajax_ansi.zip
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)