За последние 24 часа нас посетили 57339 программистов и 1810 роботов. Сейчас ищут 894 программиста ...

Проблема с кодировкой php>flash

Тема в разделе "Прочие вопросы по PHP", создана пользователем Golovorot, 24 окт 2012.

  1. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    У меня есть php скрипт
    Код (PHP):
    1. <?php 
    2. header('Content-type: text/xml; charset=utf-8'); 
    3. echo '<?xml version="1.0" encoding="UTF-8"?>'; 
    4. //получаем данные 
    5. $hash=htmlspecialchars($_GET['hash']); //хеш строка 
    6. $login=htmlspecialchars($_GET['ln']); //логин 
    7. $password=htmlspecialchars($_GET['psw']); //пароль 
    8. $action=htmlspecialchars($_GET['an']); //действие 
    9. $points=htmlspecialchars($_GET['ps']); //очки 
    10. $otherinfo=htmlspecialchars($_GET['oi']); //прочая инф 
    11. //свои переменные 
    12. $hash_string='secreKey'; 
    13. $sql_server='server; 
    14. $sql_password='pass'; 
    15. $sql_user='user'; 
    16. $sql_dbname='1234'; 
    17. echo '<result>'; 
    18. //проверка на входные параметры параметры 
    19. if ($hash==md5($hash_string.$action.date("d"))) 
    20.     //соединение с БД 
    21.     $db = mysql_connect($sql_server, $sql_user, $sql_password); 
    22.     mysql_select_db($sql_dbname); 
    23.     mysql_query("SET NAMES utf8"); 
    24.     switch($action) 
    25.     { 
    26.         case "add_user": 
    27.             if ($login!="" && $password!="") 
    28.             { 
    29.                 //проверка, не существует ли такого пользователя 
    30.                 $query_adduser=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'"'); 
    31.                 $count_adduser=mysql_num_rows($query_adduser); 
    32.                 if ($count_adduser==0) 
    33.                 { 
    34.                     //загрузка аватарки, если передана 
    35.                     if ($_FILES['image']['error']==0 && $_FILES['image']!='') 
    36.                     { 
    37.                         //Генерация нового имени для файла 
    38.                         $arr = array('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 
    39.                             'z', 'x', 'c', 'v', 'b', 'n', 'm', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'); 
    40.                         for ($i=0; $i<=8; $i++) 
    41.                         { 
    42.                             $newname.=$arr[rand(0,35)]; 
    43.                         } 
    44.                         $newname=md5($newname).'.jpg'; 
    45.                         $uploaddir='../assets/components/game/img/'; 
    46.                         $uploadfile=$uploaddir.$newname; 
    47.                         copy($_FILES['image']['tmp_name'], $uploadfile); 
    48.                     } 
    49.                     $datetime = date("c"); 
    50.                     //создание нового пользователя 
    51.                     $query_adduser=mysql_query('INSERT INTO game_users SET login="'.$login.'", password="'.md5($password).'", other_info="'.$otherinfo.'", count_game="0", points="0", date_time="'.$datetime.'", image="'.$newname.'"'); 
    52.                     echo '<sttus>OK</sttus>'; 
    53.                     echo '<message>Зарегистрирован успешно</message>'; 
    54.                 } else 
    55.                 { 
    56.                     echo '<sttus>ERROR</sttus>'; 
    57.                     echo '<message>Пользователя с таким логином не существует</message>'; 
    58.                 } 
    59.  
    60.  
    61.             } 
    62.  
    63.             break; 
    64.         case "get_user": 
    65.             if ($login!="") 
    66.             { 
    67.                 $query_user=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" LIMIT 1'); 
    68.                 $count=mysql_num_rows($query_user); 
    69.                 if ($count==0) 
    70.                 { 
    71.                     echo '<sttus>ERROR</sttus>'; 
    72.                     echo '<message>Пользователь не найден</message>'; 
    73.                 } else 
    74.                 { 
    75.                     $user_data=mysql_fetch_assoc($query_user); 
    76.                     $xml = new DOMDocument('1.0', 'UTF-8'); 
    77.                     echo '<sttus>OK</sttus>'; 
    78.                     echo '<login>'.$user_data['login'].'</login>'; 
    79.                     echo '<other_info>'.$user_data['other_info'].'</other_info>'; 
    80.                     echo '<count_games>'.$user_data['count_game'].'</count_games>'; 
    81.                     echo '<points>'.$user_data['points'].'</points>';            
    82.                     if ($user_data['image']!="") 
    83.                     { 
    84.                         echo '<image>../assets/components/game/img/'.$user_data['image'].'</image>';                         
    85.                     } 
    86.                     echo '<date_reg>'.$user_data['date_reg'].'</date_reg>';                     
    87.                 } 
    88.             }  else 
    89.             { 
    90.                 echo '<sttus>ERROR</sttus>'; 
    91.                 echo '<message>Не все необходимые параметры переданы</message>'; 
    92.             } 
    93.  
    94.             break; 
    95.         case "login": 
    96.             $query_login=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" AND password="'.md5($password).'" LIMIT 1'); 
    97.             $count=mysql_num_rows($query_login); 
    98.             if ($count==0) 
    99.             { 
    100.                 echo '<sttus>ERROR</sttus>'; 
    101.                 echo '<message>Пользователя с таким логином и паролем не существует</message>'; 
    102.             } else 
    103.             { 
    104.                 echo '<sttus>OK</sttus>'; 
    105.                 echo '<message>Аутентифицирован</message>'; 
    106.             } 
    107.             break; 
    108.         case "game": 
    109.             if ($login!="" && $points!="") 
    110.             { 
    111.                 //получение инфы о играх и баллах пользователя 
    112.                 $query_game=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" LIMIT 1'); 
    113.                 $data=mysql_fetch_assoc($query_game); 
    114.                 $points_data=$data['points']; 
    115.                 $count_games_data=$data['count_game']; 
    116.                 //обновление инфы 
    117.                 $query_game=mysql_query('UPDATE game_users SET points="'.($points_data+$points).'", count_game="'.($count_games_data+1).'" WHERE login="'.$login.'"'); 
    118.                 //добавление проведеной игры в бд 
    119.                 $query_game=mysql_query('INSERT INTO game_games SET user="'.$data['id'].'", datetime="'.date('c').'", points="'.$points.'"'); 
    120.                 echo '<sttus>OK</sttus>'; 
    121.                 echo '<message>Данные успешно обновленны</message>'; 
    122.             } 
    123.             else 
    124.             { 
    125.                 echo '<sttus>ERROR</sttus>'; 
    126.                 echo '<message>Ошибка обновления данных</message>'; 
    127.             } 
    128.             break; 
    129.         case "delete": 
    130.             if ($login!="" && $password!="") 
    131.             { 
    132.                 $query_del=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" AND password="'.md5($password).'" LIMIT 1'); 
    133.                 $count_del=mysql_num_rows($query_del); 
    134.                 $del_data=mysql_fetch_assoc($query_del); 
    135.                 if ($count_del!=0) 
    136.                 { 
    137.                     mysql_query('DELETE FROM game_users WHERE id="'.$del_data['id'].'"'); 
    138.                     mysql_query('DELETE FROM game_games WHERE user="'.$del_data['id'].'"'); 
    139.                     echo '<sttus>OK</sttus>'; 
    140.                     echo '<message>Пользователь удален и его данные о играх очищенны</message>'; 
    141.                 } 
    142.                 else 
    143.                 { 
    144.                     echo '<sttus>ERROR</sttus>'; 
    145.                     echo '<message>Логин и пароль не совпадают</message>'; 
    146.                 } 
    147.             } 
    148.             else 
    149.             { 
    150.                 echo '<sttus>ERROR</sttus>'; 
    151.                 echo '<message>Логин и пароль не отправлен</message>'; 
    152.             } 
    153.             break; 
    154.         case "top10": 
    155.             $query_page=mysql_query('SELECT * FROM game_users ORDER BY points DESC LIMIT 10'); 
    156.             $xml = new DOMDocument('1.0', 'UTF-8'); 
    157.             echo '<sttus>OK</sttus>'; 
    158.             $k=1; 
    159.             while ($data=mysql_fetch_assoc($query_page)) 
    160.             { 
    161.                 echo '<pos'.$k.'>'; 
    162.                 echo '<login>'.$data['login'].'</login>'; 
    163.                 echo '<points>'.$data['points'].'</points>'; 
    164.                 echo '</pos'.$k.'>'; 
    165.                 $k++; 
    166.             }             
    167.             break; 
    168.         default: 
    169.             echo '<sttus>ERROR</sttus>'; 
    170.             echo '<message>Неизвестное действие</message>'; 
    171.             break; 
    172.     } 
    173.     mysql_close($db); 
    174. } else 
    175.     echo '<sttus>ERROR</sttus>'; 
    176.     echo '<message>Неправильная строка hash</message>'; 
    177. echo '</result>; 
    178. ?>
    Этод код должен возвращать xml, но возвращает непойми что. Мне подсказали, что нужно воспользоваться методом htmlspecialchars_decode как им воспользоваться?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а если заменить
    $hash=htmlspecialchars($_GET['hash']); //хеш строка
    на
    $hash=$_GET['hash']; //хеш строка
    ?
    и далее ну ты понял
     
  3. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    Дело в том, что код не мой и я в php мало что знаю. Далее ко всем переменным применить такое?

    Добавлено спустя 5 минут 53 секунды:
    Вариант не помог
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    покажи образец исковерканного результата
     
  5. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    %3C%3Fxml%20version=%221%2E0%22%20encoding%3D%22UTF%2D8%22%3F%3E%3Cresult%3E%3Csttus%3EERROR%3C%2Fsttus%3E%3Cmessage%3E%CD%E5%EF%F0%E0%E2%E8%EB%FC%ED%E0%FF%20%F1%F2%F0%EE%EA%E0%20hash%3C%2Fmessage%3E%3C%2Fresult%3E&onLoad=%5Btype%20Function%5D&psw=test&ln=test&hash=fe0aaf49f6ed45306c0f8662ca7753ec

    Добавлено спустя 19 секунд:
    Код (Text):
    1. %3C%3Fxml%20version=%221%2E0%22%20encoding%3D%22UTF%2D8%22%3F%3E%3Cresult%3E%3Csttus%3EERROR%3C%2Fsttus%3E%3Cmessage%3E%CD%E5%EF%F0%E0%E2%E8%EB%FC%ED%E0%FF%20%F1%F2%F0%EE%EA%E0%20hash%3C%2Fmessage%3E%3C%2Fresult%3E&onLoad=%5Btype%20Function%5D&psw=test&ln=test&hash=fe0aaf49f6ed45306c0f8662ca7753ec
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это похоже на обработку для отправки в ссылку, выражаясь простым язком.
    результат работы urldecode():
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8"?><result><sttus>ERROR</sttus><message>������������ ������ hash</message></result>&onLoad=[type Function]&psw=test&ln=test&hash=fe0aaf49f6ed45306c0f8662ca7753ec
    это раз.

    два. я не вижу в коде проблем с отображением. Всё должно выводиться так, как оно тут написано. Так что есть версия, что это где-то после коверкается.
     
  7. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Она на вышем мусоре даёт мусор. Urldecode нормально перекодирует, я ж написал.
     
  9. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    А никак сделать нельзя, чтобы он приходил сразу в xml варианте?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    он у вас ТУТ в правильном варианте.

    проблема ГДЕ-ТО ЕЩЕ.