Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перекодировка из ANSI в UTF-8 / 4 сообщений из 4, страница 1 из 1
25.03.2013, 19:38
    #38197880
michal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка из ANSI в UTF-8
Всем привет. У меня такая проблема. Есть парсер который парсит страницы (кодировка ISO-8859-1). Сама страница парсера в той же кодировке. выводит все хорошо:
Team 1 - Ac Milan id = 3
Result - 4 - 1
Team 2 - Lazio Roma id = 10
id match = 1523
id player = 428 | id club = 10
Player - M. Zárate
Goal minute - 26 | Result match - 1 - 1 | Type goal - 0

Дальше мне нужно проверить в таблице есть ли такой игрок (M. Zárate), если есть то идем дальше если нет то записать и взять его id. База - postgresql в UTF-8.
вот так смотрю есть ли этот игрок. Проблема следующая, если игрок имеет имя с буквами (á, í... Zárate, Kaká) - то в цикле оно пропускает его, выводит - Error player
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$id_player = pg_query("SELECT * FROM player WHERE name='".trim($name_player)."'");
            if(!$id_player){ 
                echo "<h3>Error player</h3>";
            }else{
                if(pg_numrows($id_player)==null){
                    echo 'No id player. Continue insert';                    
                    pg_query($dbconn, "INSERT INTO player (name) VALUES ('$name_player')");
                    echo "Insert - ".$name_player;
                }
            }


Пробивал перекодировать полученные данные
Код: php
1.
2.
$arrLine = file_get_contents($link_site);
$arrLine_t = iconv('ISO-8859-1', 'UTF-8', $arrLine);


но ошибка страницы 103
пробивал уже саму переменную перекодировать
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$name_player= iconv('ISO-8859-1', 'UTF-8', $name_player);
$id_player = pg_query("SELECT * FROM player WHERE name='".trim($name_player)."'");
            if(!$id_player){ 
                echo "<h3>Error player</h3>";
            }else{
                if(pg_numrows($id_player)==null){
                    echo 'No id player. Continue insert';                    
                    pg_query($dbconn, "INSERT INTO player (name) VALUES ('$name_player')");
                    echo "Insert - ".$name_player;
                }
            }


то же самое 103

следующий мой вариант записать у файл данные и с файла прочитать. но неудачно.
Прошу помогите.
...
Рейтинг: 0 / 0
26.03.2013, 07:28
    #38198144
nbaksalyar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка из ANSI в UTF-8
michalБаза - postgresql в UTF-8.
А перед записью в БД данные перекодируете?
И откуда берется переменная $name_player - приходит от пользователя откуда-то?
...
Рейтинг: 0 / 0
26.03.2013, 20:25
    #38199378
michal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка из ANSI в UTF-8
nbaksalyar А перед записью в БД данные перекодируете?
И откуда берется переменная $name_player - приходит от пользователя откуда-то?


мне нужно еще узнать id-игрока в базе если он есть, если нету то записать.
пробивал перекодировать перед записью но все попытки перекодировать не увенчались успехом.
переменная $name_player - при переборе массива в цикле записывается имя игрока
Код: php
1.
$name_player = substr($result[$g][$in_g], 5, 100); 


ниже приведу пример парсера только без функций )
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
if(isset($_POST['start_parser'])){
    $link_site = $_POST['link_site'];

    $arrLine = file_get_contents($file_upl);    
    $arrLine = strtolower($arrLine);
    $arr = getBetweenStringsAll("<div id='balloon", '</div>', $arrLine);    

    $list = array();
    for ($i = 0; $i < count($arr); $i++)
    {
        $list[] = getBetweenStringsAll('tr ', '</tr>', $arr[$i]); 
    }
    
    $result = array();
    for ($i = 0; $i < count($list); $i++)
    {
        $result[$i] = array();
        for ($j = 0; $j < count($list[$i]); $j++)
        {
            $list[$i][$j] = trim(strip_tags("<tr " . $list[$i][$j]));
            $r = explode("&nbsp;", $list[$i][$j]);
            for ($k = 0; $k < count($r); $k++)
            {
                $r[$k] = trim($r[$k]);
                if ($r[$k] == "" || $r[$k] == "att.:")
                {
                    continue;
                }
                $r[$k] = str_replace(array("\n", "\r", "   "), " ", $r[$k]);
                $result[$i][] = ucwords(strtolower($r[$k]));
            }
        }
    }

// ну и ниже уже идет разбор массива

//вот малый пример где берется переменная $name_player
            if(is_numeric($numerink)){
                $id_club = $team_id2;
                $name_player = substr($result[$g][$in_g], 5, 100);                
            }
}
...
Рейтинг: 0 / 0
28.03.2013, 02:03
    #38201482
nbaksalyar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка из ANSI в UTF-8
michal,

Полагаю, вам нужно все же все используемые данные сразу кодировать в UTF-8 - как перед записью в БД, так и перед SQL-запросом. Потому что в PostgreSQL вы используете UTF-8, и, соответственно, все строки он ожидает в этой кодировке - в т.ч. и в запросах.

michalпробивал перекодировать перед записью но все попытки перекодировать не увенчались успехом.
Почему не работает, какую выдает ошибку?
Пока сложно понять, в чем конкретно у вас проблема. :(

Попробуйте не через iconv, а через mb_convert_encoding ($player_name, 'UTF-8', 'ISO-8859-1').
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перекодировка из ANSI в UTF-8 / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]