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

Форум PHP

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

 

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

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

тема: Определение кодировки
 
 автор: Ильдар   (08.07.2009 в 17:50)   письмо автору
 
 

как определить кодировку?
нужно определить кодировку "iso-8859-1" или "Windows-1252"

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:01)   письмо автору
 
   для: Ильдар   (08.07.2009 в 17:50)
 

Кодировки чего?

  Ответить  
 
 автор: Ильдар   (08.07.2009 в 18:05)   письмо автору
 
   для: sim5   (08.07.2009 в 18:01)
 

текста.
в переменной $text имеется текст, вот его нужно определить

  Ответить  
 
 автор: Trianon   (08.07.2009 в 18:08)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:05)
 

переменная php, содержащая текст, не несет информацию о том, в какой кодировке он записан.
Это может быть известно лишь источнику.
Человек (в некоторых частных случаях и скрипт ) по содержанию текста может строить догадки .
Детерминированно определить кодировку по тексту в общем случае невозможно.

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:10)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:05)
 

Ну если это весь текст русский, и только текст:
<?
$s 
"цукуолвыаы";
echo 
preg_match("/[а-яА-Я]/"$s[0]) ? "This win-1251" "This fignjaaaa";

  Ответить  
 
 автор: Ильдар   (08.07.2009 в 18:12)   письмо автору
 
   для: sim5   (08.07.2009 в 18:10)
 

получается если там будет другой набор символов типа не русские а какие нибудь с закорючками, то значит он не win ?

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:14)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:12)
 

Вам Trianon уже сообщил о прискорбном факте, мне добавить нечего. Поищите в сети, может кто-то ломал голову и "родил" нечто....

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 18:45)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:12)
 

Вот это может сработать, но только в том случае, если есть хоть одна буква кирилицы.
<?php 
function get_charset_text($string
{  
    
$sample iconv('utf-8''utf-8'$string);
    if(
$sample == $string)
    return 
'This utf-8';
    else  
    return 
'This fignjaaaa';
}

  Ответить  
 
 автор: Trianon   (08.07.2009 в 19:12)   письмо автору
 
   для: Николай2357   (08.07.2009 в 18:45)
 

А если там строка на греческом? На иврите? На японском?

Какая принципиаьная разница?

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 20:17)   письмо автору
 
   для: Trianon   (08.07.2009 в 19:12)
 

Чесно говоря мне не приходилось писать сайты на японском, и уж тем более на иврите. Несвезло. Может и нет разницы... По моему разумению, если кодировка символа отличается от utf-8, то должно сработать. Понятия не имею как под win-1251 сделать, но по крайней мере в utf кирилицу различает.
Надо иврит попробовать)

  Ответить  
 
 автор: sim5   (08.07.2009 в 20:19)   письмо автору
 
   для: Николай2357   (08.07.2009 в 20:17)
 

Зачем спорить, не зная какой аист приносит дитя автору.) Если он пытается определить кодировку текста полученного со сторонней страницы, то get_headers(url, 1) ему в помощь.

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 20:43)   письмо автору
 
   для: sim5   (08.07.2009 в 20:19)
 

Не факт. Кодировка файла может и отличаться от той, которая в заголовке. Смотря какие цели преследуются однако.

  Ответить  
 
 автор: sim5   (08.07.2009 в 20:46)   письмо автору
 
   для: Николай2357   (08.07.2009 в 20:43)
 

Это как может отличаться кодировка страницы от кодровки ее контента?

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 21:09)   письмо автору
 
   для: sim5   (08.07.2009 в 20:46)
 

Легко. Вот это в какой кодировке файл?
Файл

  Ответить  
 
 автор: sim5   (08.07.2009 в 21:17)   письмо автору
 
   для: Николай2357   (08.07.2009 в 21:09)
 

Ну блин, развезло вас на экзотику. Ну да, а если еще и листинг кода какого либо там, и еще чего-то.... Речь шла о контенте, причем началось все в разделе Разное, почитайте.... А то что вы приписали, так этого кусок с форума, а форум на 1251, а то, что не войдет в ее рамки, так будет HTML представлением.

  Ответить  
 
 автор: Trianon   (08.07.2009 в 21:25)   письмо автору
 
   для: sim5   (08.07.2009 в 21:17)
 

Оттуда это как раз не следовало.
Первоначально автор привел изображение строки символов latin-1, и результат своей (естественно неудачной) попытки эту строку просунуть в этот форум (который, понятное дело, от браузера смог эту строку получить лишь html-закодированной)
Откуда он взял эту строку, контентом чего она являлась - тут можно только гадать.

  Ответить  
 
 автор: sim5   (08.07.2009 в 21:32)   письмо автору
 
   для: Trianon   (08.07.2009 в 21:25)
 

Я тоже не знаю, а лишь предполагаю, что возможно он получает контент со страниц сторонних. В противном случае может быть только одно - автор пишет сам текст в переменные, и тут же забывает в какой кодировке работает, а потому ему и нужно определение :)
Если же со страницы, то, что привел Николай ни как не может иметь кодировку отличную от 1251, в которой вся страница "рождена".

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 21:32)   письмо автору
 
   для: sim5   (08.07.2009 в 21:17)
 

Да не важно что там в файле, я первый попавшийся сунул. Важно что в ответе сервера. А там utf-8, хотя файл в win.

  Ответить  
 
 автор: sim5   (08.07.2009 в 21:35)   письмо автору
 
   для: Николай2357   (08.07.2009 в 21:32)
 

Ответ сервера вот по этой странице - http://softtime.ru/forum/read.php?id_forum=1&id_theme=66403, будет следующим:
Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Wed, 08 Jul 2009 17:34:00 GMT
    [Content-Type] => text/html; charset=windows-1251
    [Connection] => close
    [Server] => Apache
    [Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    [Expires] => Thu, 19 Nov 1981 08:52:00 GMT
    [Set-Cookie] => PHPSESSID=7de6faa548c3ecc6e0089c11aced0999; path=/
    [Pragma] => no-cache
)

Где тут UTF-8?

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 21:43)   письмо автору
 
   для: sim5   (08.07.2009 в 21:35)
 

Как так? Вот что я вижу:
Array
(
    [0] => HTTP/1.1 200 OK
    [Server] => nginx/0.5.36
    [Date] => Wed, 08 Jul 2009 17:42:26 GMT
    [Content-Type] => text/plain; charset=UTF-8
    [Content-Length] => 6
    [Last-Modified] => Wed, 08 Jul 2009 17:14:14 GMT
    [Connection] => close
    [Accept-Ranges] => bytes
)

согласно Вашей функции. И это логично, потому что так настроен сервер...

  Ответить  
 
 автор: sim5   (08.07.2009 в 21:50)   письмо автору
 
   для: Николай2357   (08.07.2009 в 21:43)
 

И что это за страница?

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 22:07)   письмо автору
 
   для: sim5   (08.07.2009 в 21:50)
 

Это файл, который по ссылке. Как узнать что он win-1251?

  Ответить  
 
 автор: sim5   (08.07.2009 в 22:11)   письмо автору
 
   для: Николай2357   (08.07.2009 в 22:07)
 

<?
$upl1 
"http://softtime.ru/forum/read.php?id_forum=1&id_theme=66403";
$url2 "http://ru2.php.net/manual/ru/function.iconv.php";
echo 
"<pre>";
print_r(get_headers($upl11));
print_r(get_headers($url21));
echo 
"</pre>";
?>

Ответ:
Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Wed, 08 Jul 2009 18:10:23 GMT
    [Content-Type] => text/html; charset=windows-1251
    [Connection] => close
    [Server] => Apache
    [Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    [Expires] => Thu, 19 Nov 1981 08:52:00 GMT
    [Set-Cookie] => PHPSESSID=572a21397c5c51e7a15b715a876e3c02; path=/
    [Pragma] => no-cache
)
Array
(
    [0] => HTTP/1.1 200 OK
    [Server] => nginx/0.8.4
    [Date] => Wed, 08 Jul 2009 18:10:25 GMT
    [Content-Type] => text/html;charset=utf-8
    [Connection] => close
    [X-Powered-By] => PHP/5.2.10
    [Content-language] => ru
    [Set-Cookie] => Array
        (
            [0] => LAST_LANG=ru; expires=Thu, 08-Jul-2010 18:10:25 GMT; path=/; domain=.php.net
            [1] => COUNTRY=RUS; expires=Wed, 15-Jul-2009 18:10:25 GMT; path=/; domain=.php.net
        )

    [Last-Modified] => Wed, 08 Jul 2009 01:40:49 GMT
    [Vary] => Cookie
    [X-PHP-QUESTION] => I wonder if anyone will ever notice this
    [Link] => ; rel=shorturl
)

При чем тут?:
[Content-Length] => 6 
[Accept-Ranges] => bytes

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 22:27)   письмо автору
 
   для: sim5   (08.07.2009 в 22:11)
 

>При чем тут?:
Потому что я убрал всё из файла. Сейчас там написано
Файл

Вот если так:
<?php 
function get_charset_text($string
{  
    
$sample iconv('utf-8''utf-8'$string);
    if(
$sample == $string)
    return 
'This utf-8';
    else  
    return 
'This fignjaaaa';
}
    
$url 'http://irbis-team.com/1.txt';
$header get_headers($url,1);
echo 
$header['Content-Type'] , '<br>';
$string file_get_contents($url);
echo 
get_charset_text($string);
?>

То получается так:
text/plain; charset=UTF-8
This fignjaaaa

То есть там на самом деле фигня, а заголовок показывает utf-8

  Ответить  
 
 автор: sim5   (08.07.2009 в 22:33)   письмо автору
 
   для: Николай2357   (08.07.2009 в 22:27)
 

Ну я же говрю, что вас на экзотику развезло, это уж вы с ней сами разбирайтесь.

  Ответить  
 
 автор: Николай2357   (08.07.2009 в 22:37)   письмо автору
 
   для: sim5   (08.07.2009 в 22:33)
 

Это не меня... Это автора. Каков вопрос - таков ответ)))

  Ответить  
 
 автор: sim5   (08.07.2009 в 22:43)   письмо автору
 
   для: Николай2357   (08.07.2009 в 22:37)
 

А я о чем речь вел? О нормальной html-странице, а не о текстовом файле по индивидуальной ссылке. Узнать его кодировку, это уже другой вопрос. Конечно я могу и картинку в текстовом виде пришпандорить так - кому делать нефиг пусть разбирается в ее кодировке. Но если вы будете включать текстовый файл в html-страницу, то уж наверняка в той же кодировке что и весь основной контент страницы этой.

  Ответить  
 
 автор: mihdan   (08.07.2009 в 22:03)   письмо автору
 
   для: Николай2357   (08.07.2009 в 21:43)
 

text/plain?

  Ответить  
 
 автор: Trianon   (08.07.2009 в 18:12)   письмо автору
 
   для: sim5   (08.07.2009 в 18:10)
 

чего ради?
Даже если текст скрипта в этой кодировке. Что само по себе не факт.

  Ответить  
 
 автор: Ильдар   (08.07.2009 в 18:23)   письмо автору
 
   для: Trianon   (08.07.2009 в 18:12)
 

мда, значть проблема.. ((

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:24)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:23)
 

Кто "рожает" вашу переменную?

  Ответить  
 
 автор: Trianon   (08.07.2009 в 18:31)   письмо автору
 
   для: Ильдар   (08.07.2009 в 18:23)
 

Из формы на вход скрипту браузер обычно посылает текст в той же кодировке, в какой был charset Content-Type документа с формой.

  Ответить  
Rambler's Top100
вверх

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