Один хостинг, одни настройки, две одинаковые формы - два разных результата

Ergo

Новичок
Один хостинг, одни настройки, две одинаковые формы - два разных результата

Первоначально думал что проблема с MySQL. Проблема детально описана тут

Потом решил проследить заголовки и увидел, что в одном случае в заголовке формы передается

Пишем в комментариях Тест

Передается

comments=%D2%E5%F1%F2

в базу данных не записывается, потому как обнуляется.

На другом сайте в такой же форме пишем в комментариях Тест

Передается

comments=%26%231058%3B%26%231077%3B%26%231089%3B%26%231090%3B


в базу данных записывается.

Что бы это значило? Почему в одном случае используется одна кодировка для передаче через форму, а в другом случае - другая?
 

SiMM

Новичок
Кодировку у странички выставь правильную. И в хидерах не забудь.
 

Ergo

Новичок
нашел разницу в формах.
в первом случае стояла кодировка Windows-1251 (страница на русском языке) пишем в форме по русски отправляем форму "Тест". В заголовке передается comments=%D2%E5%F1%F2 - в базу данных не записывается.

во втором случае (англоязычная страница) стоит кодировка ISO-8859-1 пишем в форме по русски отправляем форму "Тест" - в заголовке передается comments=%26%231058%3B%26%231077%3B%26%231089%3B%26%231090%3B
и в базу данных соответственно записывается.

Ради теста для первого сайта поменял кодировку на ISO-8859-1 и форма заработала!!! Но весь сайт у меня в кракобязах, так как правильная кодировка то Windows-1251.

Где-то в настройках сервера проблема с настройками и серьезная... но где???
 

Ergo

Новичок
Кодировку у странички выставь правильную. И в хидерах не забудь.
В том то и дело что кодировка у странички стоит правильная. Если поставить не правильную - то комментарий добавляется.
 

Ergo

Новичок
ничего нового там не прочитал. У меня не работают не только мои скрипты, но и стандартные типа phpBB. Т.е. проблема в настройках Apache или PHP а не в коде. Наверное я не правильно выбрал раздел форума для вопроса.
 

SiMM

Новичок
В чём заключается проблема - выясняется в процессе отладки. А не при помощи посторонних людей, которые путём проявления недюжих телепатических способностей скажут номер строки в скрипте, где нужно исправить одно значение на другое.
 

Ergo

Новичок
Если так принципиально то отладка не выдает ошибок вообще.
 

alexhemp

Новичок
Автор оригинала: Ergo
Если так принципиально то отладка не выдает ошибок вообще.
Читай http://phpfaq.ru/debug еще раз. Не понял - еще раз. И так до просветления.

Потом ты поймешь что проблему локализовать можешь только ты. Пиши маленькие скрипты из одного поля и смотри обмен данными. Думай, экспериментируй.
 

Ergo

Новичок
Да все это я понимаю и полностью согласен. Но когда не работает например такой простейший скрипт как...

Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
<form method=POST action="test2.php">
<input type="text" name="test" value=""><input type="submit" name="send" value="Submit">
</form>

<?

if(!empty($_POST['send'])) {
	echo "Script received value: <b>" . $_POST['test'] . "</b>";
}

?>

</body>
</html>
-~{}~ 31.12.05 16:43:

Мой вывод. не работают русские символы в передаваемых $_POST переменных. Но как этот вывод сформировать научно к сожалению не знаю. Думаю нужно спрашивать в форуме Все о хостинге на PHP + Colocation + настройка Apache. Правильный ход мыслей?
 

SiMM

Новичок
Я же тебе сказал - ШЛИ КОДИРОВКУ В ХИДЕРЕ. Читал он блин всё. Заголовки-то поди так и не глянул до сих пор.
 

SiMM

Новичок
> я же даже в самом первом сообщении писал что заголовки смотрел.
Это не мешает мне усомниться в этом факте. Тем более что никаких доказательств этого ты не привёл.
 

Ergo

Новичок
Для чистоты эксперимента изменил скрипт до

Код:
<? header('Content-Type: text/html; charset=windows-1251');?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
<form method=POST action="test2.php">
<input type="text" name="test" value=""><input type="submit" name="send" value="Submit">
</form>

<?

if(!empty($_POST['send'])) {
	echo "Script received value: <b>" . $_POST['test'] . "</b>";
}

?>

</body>
</html>
Работать от этого формы не стали.

Вот кстати ответ сервера:

HTTP/1.x 200 OK
Date: Sat, 31 Dec 2005 14:56:31 GMT
Server: Apache
X-Powered-By: PHP/4.4.1
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=windows-1251


-~{}~ 31.12.05 17:00:

А вот запрос к серверу

POST /test2.php HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,ru;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://site.ru/test2.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
test=%D2%E5%F1%F2&send=Submit


- тут видно что переменные передаются, но не принимаются

-~{}~ 03.01.06 09:07:

Может кому пригодится...

В общем проблема решилась добавлением в .htaccess строк:

php_value mbstring.language "Russian"
php_value mbstring.http_input "auto"
php_value mbstring.http_output "cp1251"
php_value mbstring.encoding_translation "On"
 
Сверху