Не передаются русские символы, вводимые в input при отправке формы

Lancerrr

Новичок
Здравствуйте!

Появилась маленькая проблема.
Хостер у меня на хосте вчера обновил версию PHP , поставил 5.4.28 . Хостинг этот американский, находится территориально в Чикаго.

Спасибо ему огромное, конечно, что он идет в ногу со временем...
Но после этого у меня на обоих сайтах , которые там хостятся, возникла проблема - через формы передачи текста (text, password, textarea) теперь не проходит русский текст! Как будто поля формы не заполнены. А если латиницей заполнить, то все нормально, текст проходит. Короче, комментарии отправлять невозможно, логиниться (если у кого ник на русском) тоже без шансов.

Я погуглил , посоветовался в форумах )) . И нашел - вот: loco.ru/materials/233-codeigniter-form-and-post-problem-on-mac-with-mamp . По описанию - типично мой случай.
Проблема, возникающая при введении символов русского языка в input приводит к тому, что эти значения не передаются и форма выдает ошибку валидации. С английскими символами всё нормально. Не передаются русские символы, вводимые в input при отправке формы.

Там же рецепт решения:
Проблема связана с MAMP на mac. Если в MAMP 1.9.6.1 включить версию PHP 5.2.17, то всё работает правильно, но с включённой версией PHP 5.3.5 уже значения полей формы отправятся пустыми, если вы разрабатываете сайт на русском или вводите спец. символы в поля input.

Эта проблема устранена в версии MAMP 2.0.2.

Хех, ну это конечно хорошо, что проблема знакома ))
Но как это решить применительно к моим сайтам ?
Проблема в том, что я не могу влиять на решения хостера. Но и на другой хостинг сбежать - это последний вариант.

Какие есть пути решения?
Как можно иначе передавать данные форм? Пробовал метод GET , но тогда слишком длинный хвост у адреса URL , и кусок хвоста теряется , результат - данные потеряны.
Что можно сделать самому, не обращаясь к хостеру?
Можно ли решить вопрос через файл htaccess ?

Заранее благодарен за любые мнения.
 

AnrDaemon

Продвинутый новичок
А почему не применить прямой метод решения проблемы? Вставить шило в зад техподдержке хостера. И поворачивать каждые полчаса.
 

Lancerrr

Новичок
Не получится, хостер американский, там хостируются в подавляющем большинстве англоязычные сайты. И мои там же сбоку припеку приютились ))
У этого хостера достаточно льготные для меня условия, поэтому я не хочу с него уходить. Но у него практически нет техподдержки.
И я не могу влиять на решения, которые принимает хостер . Т.е. он обновил РНР до 5.4.xx - мне это обновление создает проблемы из за смены кодировки по умолчанию на UTF-8 , но я не могу его убедить, чтоб он откатил обратно.

Чтоб не вдаваться в дебри скриптов сайта, я пошел от самого простого - создал простейшую пару - форма + обработчик
Вот форма - http://gynecologia.info/testform.html - сюда можно что-то ввести на русском , на английском или отправить пустую форму.
Если будет работать эта пара, то можно будет сделать по образу и подобию все остальные скрипты-обработчики.

Код формы
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Тестовая форма</title>
</head>
<body>
Тестовая форма
<form name="testform" method="post" action="reciver.php" accept-charset="utf-8">
            Передать что-либо: <br>
            <input name="words" type="text" size="40" maxlength="40">
            <br>       
            <input name="Submit" type="submit" value="Отправка"></form>
</body>
</html>
Код обработчика
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Обработчик тестовой формы</title>
</head>
<body>
<?php
$words = $_POST['words'];
if ($words == "") 
{
echo "Ошибка, пустое поле. Error - empty"; 
}
else
{
 $words = strip_tags($words);
 $words = htmlspecialchars($words);
 echo "$words";
}
?>
</body>
</html>
Из того, что я понял, в такой редакции (под UTF-8) вводимые данные независимо от языка (кирилица или латиница) передаются корректно и корректно показываются на экране. Но при этом превращается в кракозябры все остальное содержимое страницы, кроме этих передаваемых данных (отправьте пустую строку - будет видно, также заголовок страницы).

Т.е. как мне видится половинчатое решение - это кодировку всего обработчика оставить все же для 1251
Код:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
а перед выводом на экран (или в последующем перед сохранением в базу) менять кодировку на UTF-8 только для выводимых переменных.
Т.е. как-то декодировать $words перед выводом на экран (или сохранением в базу) в UTF-8 . (Как оно сохранится в базу в таком виде еще вопрос и как потом оттуда прочитается...) . Можно так реализовать?

Может есть более глобальное решение?
Ладно с самописанными скриптами я разберусь сам, а у меня при сайте еще форум phpbb - туда я точно не влезу, т.к. не во всех деталях представляю его алгоритм...
 

AnrDaemon

Продвинутый новичок
Не надо ничего откатывать (тем более, бесполезно просить хостера это делать - всегда дохлый номер).
А вот убедиться, что на хосте неправильно настроено программное обеспечение, и попросить хостера исправить косяк - это почти всегда срабатывает.
Кто бы там ни хостился, ничто не мешает ему хостить интернациональный сайт. И он будет так же страдать от косяков, как и вы.
Другое дело, что не видя, что реально происходит, я не могу уверенно сказать, что косяк таки не у вас.
 

keltanas

marty cats
Код:
AddDefaultCharset Windows-1251
не работает?
Вообще странно. Писать скрипты в гавнокодировке, но винить в этом провайдера.
 

Vlaimir7

Новичок
Проверьте, не используется ли у вас функция htmlspecialchars() на приемной стороне.
У меня из-за нее было дело, когда сменил хостинг.
 
Сверху