Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как определить кодировку?
 
 автор: Eugene77   (19.06.2007 в 07:05)   письмо автору
 
 

Никак не могу разобраться, как устроена связка PHP, Apachy, MySql. И особенно, какая роль у PHP.
Но такие обобщённые вопросы смысла нет задавать. Понимание общего всё равно складывается из частных деталей, когда их накапливается достаточно. Поэтому, не пишите общих фраз мне в ответ, а лучше, если хотите помочь, как можно детальнее ответе на эти вопросы:
1)Если мой скрипт получает методом POST строку, то есть ли способ определить её кодировку? Хотя бы какой-нибудь очень искусственный? Строку, например, прислал кто-то, вообще не из моей формы, а своим скриптом.
2)У меня есть приложение, работающее с базой данных, и я хочу, чтобы ещё одно приложение работало с той же базой. Однако для второго приложения я хочу перенастроить базу (кодировку указать). Может ли это нарушить работу первого приложения? Если да, то как средствами PHP этого избежать. Я понимаю, что при создании таблицы можно указывать кодировку, но меня сейчас интересует, как это сделать средствами PHP.

   
 
 автор: bronenos   (19.06.2007 в 07:08)   письмо автору
 
   для: Eugene77   (19.06.2007 в 07:05)
 

1. если вам кодировка неизвестна то и программе тоже

   
 
 автор: Ralph   (19.06.2007 в 08:09)   письмо автору
 
   для: bronenos   (19.06.2007 в 07:08)
 

1. "очень искусственным способом"-Разумеется,можно :-) средствами Php и не такие задачи решаются...Когда передо мной такой проблема возник,за полчаса написал 1.3 кб скриптик на основе статистики.

   
 
 автор: bronenos   (19.06.2007 в 12:21)   письмо автору
 
   для: Ralph   (19.06.2007 в 08:09)
 

ну или искать в некотороый последовательности коды символов и на их основе определять кодировку)

   
 
 автор: disable   (19.06.2007 в 14:32)   письмо автору
 
   для: Eugene77   (19.06.2007 в 07:05)
 

Как думаете, можно поступить так?


<?php
function detect($string)
{
    
$win=iconv('windows-1251','koi8-r',$string);
    
$win_test=iconv('koi8-r','utf-8',$win);
    if (
$string==iconv('utf-8','windows-1251',$win_test))
    return 
'win';
    else return 
'xz';
}
?>

это не проверенный скрипт, а просто идея.

   
 
 автор: Unkind   (19.06.2007 в 15:37)   письмо автору
 
   для: disable   (19.06.2007 в 14:32)
 

Нет, нельзя.
Во-первых, переводом строки в неизвестной кодировке в качестве UTF-8 Вы можете получить false, т.к. UTF-8 многобайтовая кодировка.
Во-вторых, с чего Вы вообще решили, что подобным образом вообще что-то можно выяснить?
Одни байты заменятся другими. И не более.

   
 
 автор: disable   (19.06.2007 в 16:21)   письмо автору
 
   для: Unkind   (19.06.2007 в 15:37)
 

Да , не во всех случаях срабатывает :(

   
 
 автор: Eugene77   (20.06.2007 в 07:21)   письмо автору
 
   для: disable   (19.06.2007 в 16:21)
 

Ясненько...
А сообщение POST несёт в себе только саму строку или ещё какую-то вспомогательную информацию можно из него извлечь? Может быть, о кодировке посылающей страницы, или ещё о чём-нибудь?
Вообще, что этот "POST" из себя представляет? Как его подробнее рассмотреть? Ссылочку подскажете?

Ну, и второй вопрос остался...

Спасибо всем, кто уже откликнулся! Чуть-чуть яснее становится...

   
 
 автор: bronenos   (20.06.2007 в 08:26)   письмо автору
 
   для: Eugene77   (20.06.2007 в 07:21)
 

просто способ передачи данных
а кодировку можно поискать в заголовке Content-Type

   
 
 автор: Trianon   (20.06.2007 в 10:06)   письмо автору
 
   для: bronenos   (20.06.2007 в 08:26)
 

Увы.
Там её не будет.

Кодировка будет той же, что и у страницы с формой, с которой был издан запрос.
Точнее, сервер вправе ожитать её той же.
А любые символы, за её рамками - в виде html-эквивалентов.

   
 
 автор: Eugene77   (20.06.2007 в 19:47)   письмо автору
 
   для: Trianon   (20.06.2007 в 10:06)
 

>Кодировка будет той же, что и у страницы с формой, с которой был издан запрос.
>Точнее, сервер вправе ожитать её той же.

Вот и не могу я понять этого. Как-то не стыкуется у меня в голове. Ведь это получается тогда что сервер должен помнить кодировку всех отосланных страниц. А как долго он её будет помнить?
А что если вообще не с этого сервера страница ушла?
Я бы понял если бы просто html-эквиваленты передавались, как, кажется, в случае GET
и происходит. Хотя может я опять что-то путаю... Но тогда это было бы понятно, а так пока работа метода POST остаётся в тумане.

Кстати, какой командой можно заголовки посмотреть?

   
 
 автор: Ralph   (20.06.2007 в 20:56)   письмо автору
 
   для: Eugene77   (20.06.2007 в 19:47)
 

get_all_headers()

   
 
 автор: Eugene77   (20.06.2007 в 21:12)   письмо автору
 
   для: Ralph   (20.06.2007 в 20:56)
 

Fatal error: Call to undefined function get_all_headers() in C:\Program Files\PHP Expert Editor 4.1\php9B.tmp on line 3

   
 
 автор: bronenos   (20.06.2007 в 21:30)   письмо автору
 
   для: Eugene77   (20.06.2007 в 21:12)
 

apache_request_headers()
или
apache_headers()

не помню точно

   
 
 автор: Ralph   (20.06.2007 в 21:47)   письмо автору
 
   для: Eugene77   (20.06.2007 в 21:12)
 

... мать,извиняюсь,конечно же getallheaders().Подробнее- http://ipm.kstu.ru/it/doc/php42/f/getallheaders.html

   
 
 автор: Eugene77   (21.06.2007 в 21:41)   письмо автору
 
   для: Ralph   (20.06.2007 в 21:47)
 

Спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования