Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Prikazchikof
9 / 9 / 0
Регистрация: 14.04.2015
Сообщений: 85
Завершенные тесты: 1
1

Не работает регистрация с айфонов или кодировка кириллицы в iOS

04.03.2017, 19:44. Просмотров 880. Ответов 6
Метки нет (Все метки)

Есть форма здесь
На ней аналог формы регистрации, которая закрытая: сравниваются данные пользователя с базой, если они совпадают, то выводится:
Код
CheckDatabaseData: True 
CheckLogin: True
Опытным путём было выяснено, что регистрация не работает на всех айфонах, при этом работает авторизация с того же айфона работает
Предполагаемый вариант: неправильная кодировка кириллицы
Как исправить, не выяснено
Подскажите, пожалуйста, сталкивался ли кто-нибудь с такой проблемой?

Заранее спасибо. Н
Если несложно, то напишите, что нужно уточнить, чтобы проблема была понятнее

Тестовые данные: 000-13 Имя Фамилия Отчество ИП-403
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2017, 19:44
Ответы с готовыми решениями:

Кодировка кириллицы
Всем Доброго времени суток.Люди помогите разобраться а то после 2х часов GooglA я уже вообще ничего...

Qt кодировка кириллицы
Всё никак могу разобраться с кодировкой. Необходимо объекту b присвоить символ б, но приведённый...

Пресловутая кодировка кириллицы
Здравствуйте, есть такой код #include <iostream> #include <windows.h> // для SetConsoleCP()...

Кодировка кириллицы в парсере
Привет. не пойму в чем дело. простой парсер на curl. сайт в windows-1251. во время парсинга...

Отображение кириллицы (кодировка)
Если язык системы не русский отображается кракозябра менять в реестре значения cp1251 не дело, так...

6
cyb0rg_01
Фрилансер
735 / 346 / 96
Регистрация: 05.05.2014
Сообщений: 2,607
04.03.2017, 20:23 2
Цитата Сообщение от Prikazchikof Посмотреть сообщение
Если несложно, то напишите, что нужно уточнить, чтобы проблема была понятнее
Выложить код
1
Prikazchikof
9 / 9 / 0
Регистрация: 14.04.2015
Сообщений: 85
Завершенные тесты: 1
04.03.2017, 20:47  [ТС] 3
Убрал всю кириллицу из ссылки
Босюсь, код наоборот запутает, но вот сам контроллер:
C#
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System.Linq;
using System.Web.Mvc;
using System.Threading.Tasks;
using Server.Models;
using Server.Domain.Interfaces;
using Server.Infrastructure.Data;
using Server.Services.Core;
using Server.Infrastructure.Business;
 
namespace Server.Controllers
{
    public class RegController : Controller
    {
        IUnitOfWork _unitOfWork = new UnitOfWork();
 
        // GET: Reg
        public ActionResult Index()
        {
            return View();
        }
 
        //
        // GET: /Account/Register
        [AllowAnonymous]
        public ActionResult Inp()
        {
            ViewBag.Groups = new SelectList(_unitOfWork.Groups.Get().OrderBy(q => q.Name), "GroupId", "Name");
 
            return View();
        }
 
        //
        // GET: /Account/Register
        [AllowAnonymous]
        public ActionResult Вывод()
        {
 
            return View();
        }
 
        //
        // POST: /Account/Register
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Inp(RegisterBindingModel model)
        {
 
            UserValidator userValidator = new UserValidator();
 
            var userDTO = new UserDTO()
            {
                Login = model.Login,
                Name = model.Name,
                Surname = model.Surname,
                GroupName = _unitOfWork.Groups.FindById(model.GroupId).Name,
                MiddleName = model.MiddleName,
            };
            ViewBag.CheckDatabaseData = userValidator.CheckDatabaseData(userDTO);
            ViewBag.CheckLogin = userValidator.CheckLogin(userDTO.GroupName, userDTO.Login);
 
            ViewBag.Login = model.Login;
            ViewBag.Name = model.Name;
            ViewBag.Surname = model.Surname;
            ViewBag.GroupId = model.GroupId;
            ViewBag.GroupName = _unitOfWork.Groups.FindById(model.GroupId).Name;
            ViewBag.MiddleName = model.MiddleName;
 
            ViewBag.Groups = new SelectList(_unitOfWork.Groups.Get().OrderBy(q => q.Name), "GroupId", "Name");
 
            return View();
        }
    }
}
Класс-валидатор, отвечающий как раз за сравнение данных:
C#
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
using Server.Services.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Server.Services.Core;
using HtmlAgilityPack;
using System.Net.Http;
using Server.Domain.Interfaces;
using Server.Infrastructure.Data;
 
namespace Server.Infrastructure.Business
{
    public class UserValidator : IUserValidator
    {
        private IUnitOfWork _unitOfWork = new UnitOfWork();
 
        public string EncodingUTF(string data)
        {
            Encoding srcEncodingFormat = Encoding.GetEncoding("iso-8859-1");
            Encoding dstEncodingFormat = Encoding.UTF8;
            byte[] originalByteString = srcEncodingFormat.GetBytes(data);
            byte[] convertedByteString = Encoding.Convert(srcEncodingFormat,
            dstEncodingFormat, originalByteString);
            string finalString = dstEncodingFormat.GetString(convertedByteString);
 
            return finalString;
        }
 
        public bool CheckUser(UserDTO user)
        {
 
 
 
 
            bool result = CheckDatabaseData(user);
 
            //if (result == false)
            //    CheckSiteData(user);
 
            if (!result)
                return false;
 
            result = CheckLogin(user.GroupName, user.Login);
 
            return result;    
        }
 
        public bool CheckDatabaseData(UserDTO user)
        {
            //user.Login = EncodingUTF(user.Login);
            //user.Name = EncodingUTF(user.Name);
            //user.Surname = EncodingUTF(user.Surname);
            //user.MiddleName = EncodingUTF(user.MiddleName);
            //user.GroupName = EncodingUTF(user.GroupName);
 
            var result = _unitOfWork.Users.Get(q => q.Name == user.Name
                                && q.Surname == user.Surname
                                && q.MiddleName == user.MiddleName
                                && q.Group.Name == user.GroupName
                                && (q.IsActive == null
                                        || q.IsActive == false))
                                .FirstOrDefault();
 
            if (result == null)
                return false;        
 
            return true;
        }
 
        public bool CheckLogin(string group, string login)
        {
            var result = _unitOfWork.Users.Get(q => q.Login == login).FirstOrDefault();
 
            if (result != null)
                return false;
 
            string[] dashes = { "-", "‐", "−", "‒", "⁃", "–", "—", "―" };
            int dashIndex = 0;
            foreach (var dash in dashes)
            {
                dashIndex = login.IndexOf(dash);
                if (dashIndex > 0)
                    break;
            }
 
            if (dashIndex < 0)
                return false;
 
            int year;
            try
            {
                year = Convert.ToInt32(login.Substring(dashIndex + 1));
            }
            catch
            {
                return false;
            }
 
            if (year > 16)
                return false;
 
            if (group.Length == 6 && year > 13)
                return false;
 
            if (group.Length == 7 || group.Length == 8)
            {
                var groupYear = Convert.ToInt32(group.Substring(3, 2));
 
                if (groupYear != year)
                    return false;
            }
 
            int beforeDash;
            try
            {
                beforeDash = Convert.ToInt32(login.Substring(0, dashIndex));
            }
            catch
            {
                return false;
            }
 
            if (beforeDash > 1000)
                return false;
 
            return true;
        }
 
        public bool CheckSiteData(UserDTO user)
        {
            string data;
            try
            {
                data = SendQueryToSite(user);
            }
            catch
            {
                return false;
            }
 
            HtmlDocument document = new HtmlDocument();
            document.LoadHtml(data);
            var nodes = document.DocumentNode.SelectNodes("//h3[@class='result']");
 
 
            if (nodes != null)
                return true;
            else
                return false;
        }
 
 
 
        public string SendQueryToSite(UserDTO user)
        {
 
            using (var client = new HttpClient())
            {
                var url = String.Format("http://stats.pkgh.ru/?group={0}&lastname={1} {2} {3}&period=week", user.GroupName, user.Surname, user.Name, user.MiddleName);
                var response = client.GetAsync(url).Result;
                return response.Content.ReadAsStringAsync().Result;
            }
        }
    }
}
Смена пути не помогла, проблема именно с IOS-девайсами
0
cyb0rg_01
Фрилансер
735 / 346 / 96
Регистрация: 05.05.2014
Сообщений: 2,607
04.03.2017, 21:01 4
Цитата Сообщение от Prikazchikof Посмотреть сообщение
Опытным путём было выяснено, что регистрация не работает на всех айфонах, при этом работает авторизация с того же айфона работает
Предполагаемый вариант: неправильная кодировка кириллицы
Что именно не работает и как вы пришли к выводу, что проблемы с кодировкой?
1
Prikazchikof
9 / 9 / 0
Регистрация: 14.04.2015
Сообщений: 85
Завершенные тесты: 1
04.03.2017, 21:04  [ТС] 5
Проверка данных пользователя на устройствах IOS на указанной ссылке
Введённые данные сравниваются с данными в БД, идентично введённые поля на обычном ПК и айфоне дают разный результат
0
cyb0rg_01
Фрилансер
735 / 346 / 96
Регистрация: 05.05.2014
Сообщений: 2,607
04.03.2017, 21:09 6
Лучший ответ Сообщение было отмечено Prikazchikof как решение

Решение

Prikazchikof, Если проблема на сервере поищите ошибку в методах действий контроллера RegController с помощью NLog'a например.
1
Prikazchikof
9 / 9 / 0
Регистрация: 14.04.2015
Сообщений: 85
Завершенные тесты: 1
05.03.2017, 00:36  [ТС] 7
Попробовал NLog - классная вещь, но всё больше уверен, что не могу предположить в чём ошибка
Данные ввода в логе показывают всё корректно

Может, проблема в кодировке SQL Server'а?

Добавлено через 1 час 20 минут
В общем проблема была в клиенте: дело в том, что сафари или IOS добавлял лишний пробел в конец записи после отправки данных, что весьма странно
NLog помог увидеть, спасибо pro_100_gram
0
05.03.2017, 00:36
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2017, 00:36

Кодировка при шифровании кириллицы
Недавно только перешол на виделеній сервер, ищё ево толком не знаю. Когда шыфрую строку и вывожу...

Правильная кодировка для кириллицы
cout &lt;&lt; &quot;Я учусь програмировать на С++.У меня стоит компилятор Dev C++.Проблема в том,что когда я...

Кодировка. Отображение кириллицы. 2012
Установил недавно SqlServer 2012. Если данные вносить в таблицу в среде разработки, всё нормально....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.