Время для прочтения: 1 мин. 34 сек.

Подводные камни jquery.form

Плагин jQuery Form позволяет не только сделать новые ajax-формы, но и довольно просто обновить уже существующие формы таким образом, чтобы их можно было отсылать при помощи технологии Ajax.

Работая с данным плагином под JQuery, столкнулся с проблемой кодировок. Подпилив файл jquery.form.js и добавив всего одну строку кода, удалось решить проблему.

HTML-код формы:


<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/jquery.form.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() {
        $('#form').ajaxForm(function(data) {
	    alert(data);
        });
    });
</script>
 
<form id="form" action="/" method="post">
    Имя: <input type="text" name="name" />
    <input type="submit" value="Комментировать" />
</form>

При отправке такой формы в ОС OpenSuse в браузере Opera и в ОС Windows XP SP2 в браузере Google Chrome на сервер приходили несколько раз перекодированные «крякозяблы», если сайт был в кодировке windows-1251. Покопавшись в недрах плагина, стало понятно, что данные принудительно нигде не эскейпятся и не переводяться в UTF-8 для дальнейшей передачи.

Поэтому открываем файл jquery.form.js и после строки 449, в которой написано:


var v = $.fieldValue(el, true);

Добавляем строчку:


v = encodeURIComponent(v);

Тем самым мы принудительно эскейпим все не латинские символы и кодируем их в UTF-8.

В файле приёмнике нужно проделать обратную процедуру, для чего пишем:


<?php
$name = iconv('utf-8', 'windows-1251', rawurldecode($_GET['name']));
?>

О безопасности в данном куске кода мы не заботились, так как это тема другой статьи.

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>