Проблемы с кодировкой при отправке формы

Sergo_Sev

Творец
Регистрация
14 Июн 2008
Сообщения
578
Реакции
193
При отправке формы во всплывающем окне данные передаются в другой кодировке
Кодировка страницы и всех файлов cp1251

Код:
<?

echo <<<HTML
<form action="call.php" method="post">
    <div class="Title">Заказать звонок/консультацию</div>
    <div class="Descr successHide">Заполните, пожалуйста, поля ниже, чтобы мы могли связаться с вами</div>
    <div class="oT2 successHide"><table><tbody>
        <tr>
            <td><span>Имя: <font color="red">*</font></span></td>
            <td>
                <div class="inputText"><i><b><input type="text" name="name" value="{$_POST['name']}" /></b></i></div>
            </td>
        </tr>
        <tr>
            <td><span>Телефон: <font color="red">*</font></span></td>
            <td><div class="inputText"><i><b><input type="text" name="phone" class="phone_number" rel="+7 (999) 999-9999" value="" /></b></i></div>
            </td>
        </tr>
        <tr>
            <td><span>E-mail: </span></td>
            <td><div class="inputText"><i><b><input type="text" name="email" value="" /></b></i></div>
            </td>
        </tr>
        <tr>
            <td><span>Комментарий:</span></td>
            <td>
                <div class="textarea"><i><b><textarea name="message" cols="30" rows="10" style="height:100px;"></textarea></b></i></div>
            </td>
        </tr>
        <tr>
            <td class="empty">&nbsp;</td>
            <td><div class="Buttons">
                <div class="button red send">Отправить</div>
            </div></td>
        </tr>
    </tbody></table></div>
</form>
HTML;

?>


15-11-2014.png

Если сменить кодировку файла с формой на utf 8 - всё работает правильно, но у меня ведь весь сайт в кодировке cp1251
Помогите разобраться с проблемой, из-за чего это вообще происходит?
 
Последнее редактирование:
Если сменить кодировку файла с формой на utf 8 - всё работает правильно, но у меня ведь весь сайт в кодировке cp1251
Помогите разобраться с проблемой, из-за чего это вообще происходит?
Я задам другой вопрос. Почему вы считаете что у вас кодировка сайта cp1251? И что плохого видите в UTF-8?

Для справки, иметь в 2014 году сайт в cp1251 - анахронизм и моветон, прямая дорога к таким вот глюкам. Все переползли на UTF-8 лет 5 назад.

По проблеме: у вас вебсервер, похоже, отдает UTF-8, в заголовках сайта (META) стоит CP1251, что несколько сбивает вас заставляя думать что сайт в CP1251. Этот тег уже определяют браузеры на стороне клиента (и то не все) и показывают страницу в CP (хотя это не нужно), а некоторые при этом фейлят и показывают скорее всего весь сайт кракозябрами.

Либо перенастраивайте вебсервер (зависит от сервера), либо переводите все в UTF и не мучайтесь больше.
 
Почему вы считаете что у вас кодировка сайта cp1251?
Потому, что в данном случае кодировка исходной страницы в CP1251 и движок DLE, на котором планируется использовать этот модуль, в той же кодировке
И ещё как ни странно для домена так же прописана кодировка CP1251

Почему не utf 8 ? Просто потому, что DLE изначально не было в этой кодировке, а после появления версии в utf-8 переводить все сайты в другую кодировку как то бессмысленно если они работают нормально
 
Почему не utf 8 ? Просто потому, что DLE изначально не было в этой кодировке, а после появления версии в utf-8 переводить все сайты в другую кодировку как то бессмысленно если они работают нормально
если они работают нормально - так ведь не работают, судя по теме

тогда проверьте в какой кодировке сохранен файл, создающий вывод ( Для просмотра ссылки Войди или Зарегистрируйся ), вы используете nginx, поэтому убедитесь что в директиве server {} указана корректная кодировка (по дефолту UTF-8) charset windows-1251;

если это сделано - должно работать. Если не работает - возможно после перенастройки не перезапустили nginx.

так же можно поставить костыль в сам PHP файл
PHP:
header("Content-Type: text/html; charset=windows-1251");
 
так же можно поставить костыль в сам PHP файл
Настройки nginx сейчас посмотрю, но данный скрипт так же работает и на других хостингах
Строку с отдачей заголовка прописывал - проблема осталась, прикрепляю исходники для примера
Если отправлять форму обычным способом без скриптов - проблем с кодировкой нет. Может проблема в том, что форма отправляется на сервер скриптом и он отдаёт данные в другой кодировке?

Если весь сайт останется как есть, а файл который подгружается во всплывающем оrне будет в utf 8, то это не вызовет ещё больше глюков?
 

Вложения

  • cart.rar
    269,7 KB · Просмотры: 0
У вас проблема именно в отдающем скрипте, так как кракозябар на вашем скриншоте - это отображение UTF текста в CP1251 кодировке, а не наоборот.

Так что проверяйте nginx. Что же касается других хостингов - проверьте в какой они кодировке, с cp1251 мало кто сейчас работает.

То что отправка "не из скрипта" работает корректно - это как раз подтверждение указанной выше проблемы. Браузер получает страницу и META тэг и решает как рендерить, причем в разных случаях эта мета может перекрыть хидер от сервера, а некоторые браузеры на нее могут и забить. В AJAX нету секции head-meta, там только заголовки.
 
У вас проблема именно в отдающем скрипте
Это именно то, что приходит в скрипт из формы
Нагуглил то, что JS скрипт не поддерживает cp1251 и потому в скрипт передаются данные только в кодировке utf-8
Проблема решилась добавлением такой строки iconv('utf-8', 'windows-1251', $_POST['name'])
 
Также можно отправлять данные закодированные, например, в base64. При приёме декодировать и всё норм.
 
Назад
Сверху