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

Форум PHP

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

 

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

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

тема: Определение и смена кодировки
 
 автор: Byrger   (26.10.2011 в 00:26)   письмо автору
 
 

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

Когда строка получена нужно определить ее кодирокву, сменить на UTF-8 если нужно и сделать запись в БД

Подскажите пожалуйста как определить кодировку и сделать нормальную запись в БД с нею

PS. всего 3 вида кодировок приходит cp1251, utf-8, utf-8 без BOM

  Ответить  
 
 автор: cheops   (26.10.2011 в 11:45)   письмо автору
 
   для: Byrger   (26.10.2011 в 00:26)
 

Русский текст присутствует в сообщении всегда? Нельзя ли поискать русские буквы в кодировке UTF-8, если они есть, значит это UTF-8, если нет - cp1251.

PS Собственно, если русских букв нет - проблема сама собой решается, английский текст во всех кодировках выглядит одинаково.

  Ответить  
 
 автор: Byrger   (26.10.2011 в 17:10)   письмо автору
 
   для: cheops   (26.10.2011 в 11:45)
 

Спасибо за ответ.

Не могли бы подсказать как искать русские буквы?
Разве в utf-8 их не может быть?

  Ответить  
 
 автор: cheops   (27.10.2011 в 17:32)   письмо автору
 
   для: Byrger   (26.10.2011 в 17:10)
 

Для этого хорошо бы иметь скрипт в кодировке cp1251, который использует для поиска строковые функции вроде strpos() - они не поддерживают многобайтовые кодировки и ищут только по одному байту. Русские UTF-8 символов в файле с кодировкой cp1251 можно представить следующим образом.
<?php
$utf8 
= array("%D0%B0","%D0%B1","%D0%B2","%D0%B3","%D0%B4"
 
"%D0%B5","%D1%91","%D0%B6","%D0%B7","%D0%B8"
 
"%D0%B9","%D0%BA","%D0%BB","%D0%BC","%D0%BD"
 
"%D0%BE","%D0%BF","%D1%80","%D1%81","%D1%82"
 
"%D1%83","%D1%84","%D1%85","%D1%86","%D1%87"
 
"%D1%88","%D1%89","%D1%8A","%D1%8B","%D1%8C"
 
"%D1%8D","%D1%8E","%D1%8F","%D0%90","%D0%91"
 
"%D0%92","%D0%93","%D0%94","%D0%95","%D0%81"
 
"%D0%96","%D0%97","%D0%98","%D0%99","%D0%9A"
 
"%D0%9B","%D0%9C","%D0%9D","%D0%9E","%D0%9F"
 
"%D0%A0","%D0%A1","%D0%A2","%D0%A3","%D0%A4"
 
"%D0%A5","%D0%A6","%D0%A7","%D0%A8","%D0%A9"
 
"%D0%AA","%D0%AB","%D0%AC","%D0%AD","%D0%AE"
 
"%D0%AF");
?>

  Ответить  
 
 автор: Byrger   (29.10.2011 в 10:27)   письмо автору
 
   для: cheops   (27.10.2011 в 17:32)
 

class cp1251
{

    public $utf8 = array("%D0%B0","%D0%B1","%D0%B2","%D0%B3","%D0%B4",
        "%D0%B5","%D1%91","%D0%B6","%D0%B7","%D0%B8",
        "%D0%B9","%D0%BA","%D0%BB","%D0%BC","%D0%BD",
        "%D0%BE","%D0%BF","%D1%80","%D1%81","%D1%82",
        "%D1%83","%D1%84","%D1%85","%D1%86","%D1%87",
        "%D1%88","%D1%89","%D1%8A","%D1%8B","%D1%8C",
        "%D1%8D","%D1%8E","%D1%8F","%D0%90","%D0%91",
        "%D0%92","%D0%93","%D0%94","%D0%95","%D0%81",
        "%D0%96","%D0%97","%D0%98","%D0%99","%D0%9A",
        "%D0%9B","%D0%9C","%D0%9D","%D0%9E","%D0%9F",
        "%D0%A0","%D0%A1","%D0%A2","%D0%A3","%D0%A4",
        "%D0%A5","%D0%A6","%D0%A7","%D0%A8","%D0%A9",
        "%D0%AA","%D0%AB","%D0%AC","%D0%AD","%D0%AE",
        "%D0%AF");

    public function isUTF8($str){

        foreach($this->utf8 as  $uv){
            if(strpos($str, $uv) === true)
                return true;
        }
        return false;
    }
}


Всегда выдет false
Скрипт в ANSI

  Ответить  
 
 автор: cheops   (29.10.2011 в 14:06)   письмо автору
 
   для: Byrger   (29.10.2011 в 10:27)
 

А как текст поступает скрипту (из какого источника)?

  Ответить  
 
 автор: sl1p   (29.10.2011 в 14:15)   письмо автору
 
   для: Byrger   (29.10.2011 в 10:27)
 

if(strpos($str, $uv) === true) 



результат не может быть true, поэтому:

if(strpos($str, $uv) !== false) 

  Ответить  
 
 автор: Byrger   (01.11.2011 в 09:58)   письмо автору
 
   для: sl1p   (29.10.2011 в 14:15)
 

Не получается.
Всегда false возвращает

  Ответить  
 
 автор: KPETuH   (01.11.2011 в 12:53)   письмо автору
 
   для: Byrger   (26.10.2011 в 00:26)
 

На просторах интернета видел такое решение определения utf-8

if (preg_match('//u', $string)) { /* у вас UTF-8 */ }


попробуйте может вам подойдет

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

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