Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Параметры скрипта
Форумы портала PHP.SU » » Кодировки и все смежное » Параметры скрипта

Страниц (2): [1] 2 »
 

1. STRELOK - 21 Декабря, 2011 - 18:33:33 - перейти к сообщению
Доброго времени суток!

Разрабатываю новый движок сайта, решил все делать на UTF8. Сам сайт, база данных работает прекрасно. Но столкнулся с проблемой.

страничка в утф, в htaccess стоит утф, контанттайп стоит утф. Больше я уже не знаю, где и как можно указать.

test.php?test=Тест >>> test.php?test=%D2%E5%F1%F2

PHP:
скопировать код в буфер обмена
  1.  
  2.  $test = rawurldecode($_GET['test']);
  3.  echo $test . "<br>\n";
  4.  
  5.  //это разумеется тоже не пашет
  6.  echo mysqli_query($mysqli, "INSERT INTO `test` (`value`) VALUES ('".$test."')");
  7.  


выводит 4 квадратика.

Подскажите пожалуйста, в какую сторону копать? И есть ли какие то подводные камни при работе со строками?
2. Slesher - 21 Декабря, 2011 - 18:40:46 - перейти к сообщению
ну а просто $test? И что записывается в БД?
Отображает ли браузер при выборе хъоть какой-то кодировке?
3. STRELOK - 21 Декабря, 2011 - 18:43:51 - перейти к сообщению
Slesher пишет:
ну а просто $test? И что записывается в БД?
Отображает ли браузер при выборе хъоть какой-то кодировке?

В БД запись не добавляется вообще. Могу попробовать через mysql драйвер а не через mysqli.

На счет браузера, сейчас проверю.

Просто тест - 4 квадрата

Òåñò - ISO-8859-1
Тест - Кириллица Windows
4. Slesher - 21 Декабря, 2011 - 19:56:47 - перейти к сообщению
STRELOK, ну значит строка кодируется в cp-1251, походу %D2%E5%F1%F2 передает строку именно так. Или меняйте настройки браузера, чтобы юрл иная была, или на стороне скрипта меняйте настройки.
5. tuareg - 21 Декабря, 2011 - 20:23:25 - перейти к сообщению
Попробуйте
6. STRELOK - 21 Декабря, 2011 - 21:13:42 - перейти к сообщению
tuareg пишет:
$test = urldecode($_GET['test']);

Также
7. DeepVarvar - 21 Декабря, 2011 - 22:18:31 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. header("Content-Type: text/html; charset=utf-8");
Есть?
8. Panoptik - 21 Декабря, 2011 - 22:50:23 - перейти к сообщению
а сам файл в какой кодировке сохранен? test.php который???
9. STRELOK - 22 Декабря, 2011 - 08:07:33 - перейти к сообщению
Panoptik пишет:
а сам файл в какой кодировке сохранен? test.php который???


страница в utf8 без BOM
в htaccess utf8
в хидерах utf8
в странице указан utf8

в соединении с БД тоже utf8, база данных тожу утф, таблица тоже утф. Русские, японские символы отображаются нормально.
10. Мелкий - 22 Декабря, 2011 - 09:46:34 - перейти к сообщению
0)
STRELOK пишет:
test.php?test=Тест >>> test.php?test=%D2%E5%F1%F2

Почему? Должно быть %D1%82%D0%B5%D1%81%D1%82
1) rawurldecode зачем? PHP самостоятельно декодирует $_GET.
11. STRELOK - 22 Декабря, 2011 - 21:31:43 - перейти к сообщению
Мелкий пишет:
0)
STRELOK пишет:
test.php?test=Тест >>> test.php?test=%D2%E5%F1%F2

Почему? Должно быть %D1%82%D0%B5%D1%81%D1%82
1) rawurldecode зачем? PHP самостоятельно декодирует $_GET.


Работает блин... И как быть теперь? Ведь "тест" сам браузер кодирует! Проверял на лисе, хроме, опере
12. Мелкий - 23 Декабря, 2011 - 08:49:36 - перейти к сообщению
Эксперименты:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. var_dump($_GET, $_SERVER["REQUEST_URI"]);

Опера - ok
FF - провал
Chrome - провал
Но все трое обратились по одному адресу и передали %D1%82%D0%B5%D1%81%D1%82

Мануальное указание кодировки:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. header('Content-Type: text/html; charset=utf-8');
  3. ?>
  4. <html>
  5.     <head>
  6.         <meta http-equiv=Content-Type content="text/html; charset=utf-8" />
  7. </head>
  8. <body>
  9. <a href="?f=тест">тестовая ссылка</a>
  10. <?var_dump($_GET, $_SERVER["REQUEST_URI"]);?>
  11. </body>
  12. </html>

Все трое - ок.
13. STRELOK - 24 Декабря, 2011 - 14:58:51 - перейти к сообщению
Да, но. Если ввести в адресной строке test2.php?f=Тест то мы опять вернемся к самому началу, т.е. f=%F2%E5%F1%F2.

При этом:

PHP:
скопировать код в буфер обмена
  1. <?
  2.  $fu = $_GET['f'];
  3.  var_dump($fu);
  4.  echo "<br>";
  5.  echo mb_detect_encoding($fu);
  6. ?>


отображает вот что:

string(4) "����"
UTF-8
14. Мелкий - 24 Декабря, 2011 - 15:14:09 - перейти к сообщению
STRELOK пишет:
Если ввести в адресной строке test2.php?f=Тест то мы опять вернемся к самому началу, т.е. f=%F2%E5%F1%F2.

Так вот это-то мне повторить и не удалось. Все протестированные браузеры отправляли один и тот же запрос.
Хм. Мысля, момент.
Да, под виндой - запрос пошёл на %F2%E5%F1%F2, т.е. cp1251
15. STRELOK - 24 Декабря, 2011 - 15:18:16 - перейти к сообщению
Мелкий пишет:
STRELOK пишет:
Если ввести в адресной строке test2.php?f=Тест то мы опять вернемся к самому началу, т.е. f=%F2%E5%F1%F2.

Так вот это-то мне повторить и не удалось. Все протестированные браузеры отправляли один и тот же запрос.
Хм. Мысля, момент.
Да, под виндой - запрос пошёл на %F2%E5%F1%F2, т.е. cp1251


В том то и дело... почему тогда mb определяет как утф?

 

Powered by ExBB FM 1.0 RC1