У меня есть php скрипт Код (PHP): <?php header('Content-type: text/xml; charset=utf-8'); echo '<?xml version="1.0" encoding="UTF-8"?>'; //получаем данные $hash=htmlspecialchars($_GET['hash']); //хеш строка $login=htmlspecialchars($_GET['ln']); //логин $password=htmlspecialchars($_GET['psw']); //пароль $action=htmlspecialchars($_GET['an']); //действие $points=htmlspecialchars($_GET['ps']); //очки $otherinfo=htmlspecialchars($_GET['oi']); //прочая инф //свои переменные $hash_string='secreKey'; $sql_server='server; $sql_password='pass'; $sql_user='user'; $sql_dbname='1234'; echo '<result>'; //проверка на входные параметры параметры if ($hash==md5($hash_string.$action.date("d"))) { //соединение с БД $db = mysql_connect($sql_server, $sql_user, $sql_password); mysql_select_db($sql_dbname); mysql_query("SET NAMES utf8"); switch($action) { case "add_user": if ($login!="" && $password!="") { //проверка, не существует ли такого пользователя $query_adduser=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'"'); $count_adduser=mysql_num_rows($query_adduser); if ($count_adduser==0) { //загрузка аватарки, если передана if ($_FILES['image']['error']==0 && $_FILES['image']!='') { //Генерация нового имени для файла $arr = array('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'); for ($i=0; $i<=8; $i++) { $newname.=$arr[rand(0,35)]; } $newname=md5($newname).'.jpg'; $uploaddir='../assets/components/game/img/'; $uploadfile=$uploaddir.$newname; copy($_FILES['image']['tmp_name'], $uploadfile); } $datetime = date("c"); //создание нового пользователя $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.'"'); echo '<sttus>OK</sttus>'; echo '<message>Зарегистрирован успешно</message>'; } else { echo '<sttus>ERROR</sttus>'; echo '<message>Пользователя с таким логином не существует</message>'; } } break; case "get_user": if ($login!="") { $query_user=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" LIMIT 1'); $count=mysql_num_rows($query_user); if ($count==0) { echo '<sttus>ERROR</sttus>'; echo '<message>Пользователь не найден</message>'; } else { $user_data=mysql_fetch_assoc($query_user); $xml = new DOMDocument('1.0', 'UTF-8'); echo '<sttus>OK</sttus>'; echo '<login>'.$user_data['login'].'</login>'; echo '<other_info>'.$user_data['other_info'].'</other_info>'; echo '<count_games>'.$user_data['count_game'].'</count_games>'; echo '<points>'.$user_data['points'].'</points>'; if ($user_data['image']!="") { echo '<image>../assets/components/game/img/'.$user_data['image'].'</image>'; } echo '<date_reg>'.$user_data['date_reg'].'</date_reg>'; } } else { echo '<sttus>ERROR</sttus>'; echo '<message>Не все необходимые параметры переданы</message>'; } break; case "login": $query_login=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" AND password="'.md5($password).'" LIMIT 1'); $count=mysql_num_rows($query_login); if ($count==0) { echo '<sttus>ERROR</sttus>'; echo '<message>Пользователя с таким логином и паролем не существует</message>'; } else { echo '<sttus>OK</sttus>'; echo '<message>Аутентифицирован</message>'; } break; case "game": if ($login!="" && $points!="") { //получение инфы о играх и баллах пользователя $query_game=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" LIMIT 1'); $data=mysql_fetch_assoc($query_game); $points_data=$data['points']; $count_games_data=$data['count_game']; //обновление инфы $query_game=mysql_query('UPDATE game_users SET points="'.($points_data+$points).'", count_game="'.($count_games_data+1).'" WHERE login="'.$login.'"'); //добавление проведеной игры в бд $query_game=mysql_query('INSERT INTO game_games SET user="'.$data['id'].'", datetime="'.date('c').'", points="'.$points.'"'); echo '<sttus>OK</sttus>'; echo '<message>Данные успешно обновленны</message>'; } else { echo '<sttus>ERROR</sttus>'; echo '<message>Ошибка обновления данных</message>'; } break; case "delete": if ($login!="" && $password!="") { $query_del=mysql_query('SELECT * FROM game_users WHERE login="'.$login.'" AND password="'.md5($password).'" LIMIT 1'); $count_del=mysql_num_rows($query_del); $del_data=mysql_fetch_assoc($query_del); if ($count_del!=0) { mysql_query('DELETE FROM game_users WHERE id="'.$del_data['id'].'"'); mysql_query('DELETE FROM game_games WHERE user="'.$del_data['id'].'"'); echo '<sttus>OK</sttus>'; echo '<message>Пользователь удален и его данные о играх очищенны</message>'; } else { echo '<sttus>ERROR</sttus>'; echo '<message>Логин и пароль не совпадают</message>'; } } else { echo '<sttus>ERROR</sttus>'; echo '<message>Логин и пароль не отправлен</message>'; } break; case "top10": $query_page=mysql_query('SELECT * FROM game_users ORDER BY points DESC LIMIT 10'); $xml = new DOMDocument('1.0', 'UTF-8'); echo '<sttus>OK</sttus>'; $k=1; while ($data=mysql_fetch_assoc($query_page)) { echo '<pos'.$k.'>'; echo '<login>'.$data['login'].'</login>'; echo '<points>'.$data['points'].'</points>'; echo '</pos'.$k.'>'; $k++; } break; default: echo '<sttus>ERROR</sttus>'; echo '<message>Неизвестное действие</message>'; break; } mysql_close($db); } else { echo '<sttus>ERROR</sttus>'; echo '<message>Неправильная строка hash</message>'; } echo '</result>; ?> Этод код должен возвращать xml, но возвращает непойми что. Мне подсказали, что нужно воспользоваться методом htmlspecialchars_decode как им воспользоваться?
а если заменить $hash=htmlspecialchars($_GET['hash']); //хеш строка на $hash=$_GET['hash']; //хеш строка ? и далее ну ты понял
Дело в том, что код не мой и я в php мало что знаю. Далее ко всем переменным применить такое? Добавлено спустя 5 минут 53 секунды: Вариант не помог
%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): %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
это похоже на обработку для отправки в ссылку, выражаясь простым язком. результат работы urldecode(): Код (Text): <?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 минут 7 секунд: как на счет этого? http://www.php.ru/manual/function.htmlspecialchars-decode.html