powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перекодировка из ANSI в UTF-8
4 сообщений из 4, страница 1 из 1
Перекодировка из ANSI в UTF-8
    #38197880
michal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. У меня такая проблема. Есть парсер который парсит страницы (кодировка 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
Перекодировка из ANSI в UTF-8
    #38198144
nbaksalyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michalБаза - postgresql в UTF-8.
А перед записью в БД данные перекодируете?
И откуда берется переменная $name_player - приходит от пользователя откуда-то?
...
Рейтинг: 0 / 0
Перекодировка из ANSI в UTF-8
    #38199378
michal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Перекодировка из ANSI в UTF-8
    #38201482
nbaksalyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michal,

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

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

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


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