09.03.2015, 18:10
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
charset=iso-8859-1, она же windows-1251.
Это с каких пор, если iso-8859-1 всегда была Latin-1?
Не передает у вас сервер заголовок charset, хотя вы пишите а htaccess прописано AddDefaultCharset UTF-8 , а iso-8859-1, это как раз по умолчанию работа многих php-функций.
А какие настройки имеет сервер, в панели управления смотрели?
|
|
09.03.2015, 18:18
|
Интересующийся
|
|
Регистрация: 09.03.2015
Сообщений: 15
|
|
Сообщение от laimas
|
charset=iso-8859-1, она же windows-1251.
Это с каких пор, если iso-8859-1 всегда была Latin-1?
|
https://ru.wikipedia.org/wiki/ISO_8859-1
Сообщение от laimas
|
Не передает у вас сервер заголовок charset, хотя вы пишите а htaccess прописано AddDefaultCharset UTF-8 , а iso-8859-1, это как раз по умолчанию работа многих php-функций.
А какие настройки имеет сервер, в панели управления смотрели?
|
в htaccess прописано AddDefaultCharset utf-8, я даже этот файл пресоздавал.
А какие могут быть на сервере настройки, если это хостинг обычный?..
|
|
09.03.2015, 18:39
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну так 1252, и не 1251
Что значит хостинг обычный, а что бывают необычные? )
У вас что кроме FTP другого доступа нет к хосту: РМА, панель управления, где можно определять настройки РНР, добавлять задания планировщику задач, управлять почтовыми ящиками и т.д.?
|
|
09.03.2015, 18:44
|
Интересующийся
|
|
Регистрация: 09.03.2015
Сообщений: 15
|
|
laimas, опечатка, извиняюсь. Конечно, 1252.
Да, к хостингу есть панель управления cpanel. Определять настройки php там негде, только версию можно выбрать, сейчас 5.3.
Какие конкретно настройки нужны?
крон и PMA есть, но они наверное, не в нашу кассу.
|
|
09.03.2015, 18:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Кодировка по умолчанию естественно.
Могу привести пример, когда на одном из хостов rucentr, переопределить кодировку посредством .htaccess не получается, и такое может встречаться. В панели, в настройках РНР смотрите, что определено.
Ну а то что файлы должны быть тоже в utf и без ВОМ, это вы точно знаете.
|
|
09.03.2015, 19:00
|
Интересующийся
|
|
Регистрация: 09.03.2015
Сообщений: 15
|
|
Без BOM это да. проверял все файлы.
Кодировку определить там негде.
|
|
09.03.2015, 19:04
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Мучай техподдержку. Выкинь все из .htaccess кроме чарсета, создай простой php файл с echo 'Бла бла' и пиши гневное письмо.
__________________
В личку только с интересными предложениями
|
|
09.03.2015, 19:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Да, возможно придется разбираться с техподдержкой.
Но сперва можно проверить - создать такой тестовый php-файл
<script>alert(document.charset)</script>
больше ничего не надо, запустить его но не из корня документов, а из любой публичной папки на сервере. Если будет UTF, то .htaccess пашет.
|
|
09.03.2015, 22:43
|
Интересующийся
|
|
Регистрация: 09.03.2015
Сообщений: 15
|
|
Сообщение от danik.js
|
Выкинь все из .htaccess кроме чарсета, создай простой php файл с echo 'Бла бла' и пиши гневное письмо.
|
Создал тестовый вариант. Два файла. Содержимое первого файла (index.php):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="ru">
<script language="javascript" type="text/javascript" src="http://mysite.com/jquery.js"></script>
<script language="javascript" type="text/javascript">alert('inputEncoding '+document.inputEncoding); //utf8
alert('characterSet '+document.characterSet ); //utf8
alert('charset '+ document.charset); //utf8
alert('defaultCharset '+document.defaultCharset); //windows-1252
function subm()
{
var form=new Object();
form['text']=$('#text')[0].value;
$.post( 'http://mysite.com/test/test.php?page=order',form,
function(answer,post_status)
{
if(post_status!='success')
alert('Ошибка. Операция не выполнена.');
else
if(answer)
document.write(answer);
});
}
</script>
</head>
<form action="test/test.php" method="post" accept-charset="utf-8">
<input type="text" name="text" id="text" value="" >
<input type="button" name="submit" value="Отправить" onclick="subm()">
</form>
</html>
Содержимое второго файла (test/test.php):
<script language="javascript" type="text/javascript">alert('inputEncoding '+document.inputEncoding); //utf8
alert('characterSet '+document.characterSet ); //utf8
alert('charset '+ document.charset); //utf8
alert('defaultCharset '+document.defaultCharset); //windows-1252</script>
<?php
print_r($_REQUEST);
exit;
?>
в этом упрощённом примере всё работает. Не работает на сайте, хотя всё по аналогии. Значит, не серверные настройки виноваты. Значит, где-то в коде что-то неявным образом как-то куда-то конвертит.
Где копать то?
|
|
10.03.2015, 04:25
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Оставьте в покое defaultCharset, зачем она вам нужна?
Вам нужно проверить что возвращает сервер, судя по файлу test.php все нормально. Осталось проверить как принимает сервер, возможно у вас на сервере русский Апач, с которым бывают проблемы (или связка Apache+nginx, и отдает не Apache, а nginx).
Запустите (два файла раздельных, хотя количество роли не играет, что с одного проверять, что с раздельных, без разницы). Ремируйте в htaccess добавление кодировки, и будем считать, что на сервере в настройках она не определена по умолчанию, определять ее будет непосредственно переданный заголовок. НИКАКИХ метатегов о кодировке в документе чтобы не было, document.charset не интересует, тем более что в данном случае это значение может быть и не определено.
<?
header('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE HTML>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.2.js"></script>
<script>
$(function() {
$('form').submit(function() {
$.post('2.php', $(this).serialize(), function(d) {
alert(d)
});
return false;
})
});
</script>
</head>
<body>
<form>
<input name="as" value="Текст" />
<button>Отправить</button>
</form>
</body>
</html>
Это тот кто отвечает на запрос. Его задача - детектирование кодировки запроса и выдача результата.
<?php
$char = detectEncoding($_POST['as']);
header('Content-type: text/html; charset=utf-8');
exit('Кодировка: ' . $char . ', ' . $_POST['as']);
function detectEncoding($s) {
$enc = array('utf-8', 'windows-1251', 'windows-1252');
foreach($enc as $v) {
$chk = iconv($v, $v, $s);
if(md5($chk) == md5($s)) return $v;
}
return 'Не определено';
}
?>
Проверяйте, и каков результат?
Последний раз редактировалось laimas, 10.03.2015 в 06:20.
|
|
|
|