Здравствуйте Делаю валидацию для имени пользователя при регистрации. Изначально запретил любые спецсимволы: PHP: if (preg_match("/[\||\'|\<|\>|\[|\]|\"|\!|\?|\$|\@|\#|\%|\^|\/|\\\|\&|\~|\*|\{|\}|\+|\_|\:|\.|\,|\;|\`|\=|\(|\)|\§|\°]/", $account)) { return false; } Но, задумался над тем, что хорошо бы дать пользователям вставлять различные html символы, которые на игровых ресурсах особенно любят - всякие там †Vampire† или ♣♣♣Vasya♣♣♣ Понятно, что это понты - но вокруг них многое и крутится в играх) Для их добавления, нужно разрешить использовать всего два символа: & и ; Но есть ли у этих html символов в логине какие-то подводные камни? Возможно кто-то сталкивался.
Вот прикол... я думал спецсимволы, если их вставить иконкой ♣ преобразуются в код: Код (Text): ♣ ♣ а оказалось, что нет - и проверка на спецсимволы их успешно пропускает... Получается, при запрете таких значков в логине надо идти от обратного - проверять только допустимые символы. Впрочем, вопрос все равно остается открытым - нормально ли разрешать спецсимволы в логине, или у них есть какие-то недостатки/подводные камни.
Предложу хранить два варианта: как пользователь ввёл и "канонический", очищенный от мусора. Если ты при выводе экранируешь символы через htmlspecialchars(), вреда такое красивое имя нанести не должно. Другое дело, что множество вариантов типа Alex -=Alex=- ♣ a l e x ♣ по сути являются одним и тем же именем "alex" и сортировать лучше по каноническому варианту, а может быть вообще запрещать неуникальные канонические имена.
Это unicode символы, проблемы могут быть, если менять кодировку. Так, на utf-8, всякие ♣ воспринимаются как обычные символы. Если у вас (внезапно) в базе будет храниться информация в windows-1251, то вполне могут начаться косяки и проблемы. Правда, если у вас сайт и база живут в разных кодировках - у вас уже проблемы
Спасибо за идею Подумал, что нужно делать вообще три поля: Логин - используется только для логина, не отображается на сайте, доступны только ("/^[a-zA-Z0-9а-яА-ЯёЁ\-_]*$/") Имя пользователя - доступны буквы и html-спецсимволы, отображается на сайте Каноническое имя пользователя - удаляются спецсимволы, поле используется для сортировки P.S. Существует множество способов делать копии ников - например Вася/Вaся - в первом случае используется а русская, во втором - английская. Борьба с клонами - это отдельная большая тема - что считать клонами, кого банить, кого нет...
Не надо забывать про A̴̧̨̡̨̨̛̛̤̖̖͚̱͕͔̹̬͇̪̦̘̖̳̰͇̳͙͍͎̻̪̤̖̱͚̜̩̩̳̼̰̤̬̘͙̼̰͇̟̣̰̦̖̤̰͍͔̼̖̹̻̗̱̱̺̗͚̼̖̺͕͐̀̾̍̀̍̄̄͗͊͂̂̂̀̐̈́̇͑̍̈́͂͗̿̾̀̒̍͊̉̾́͂̈́͒̈́̆͐̌͒͛̆̂͌͋͆̎̊̿̾̀̎̀̋͗̌̽͒͊̚̕͜͜͜͜͜͝͝͝͝͝ͅͅͅl̶̡̢̛̛͔͔̟̫̤̫͇̻̱̙͉̺̹͚͔̪͕͔̙̦̟͓̳̩̻̼̽̽̍̄̓̅̇̈́̈́̌́͗̒̄́̏̓̓̏̈̒̀̎͗͌̀̎͑̏̿̊̓̀́̀̍̈́̀̏͂̀͗͛̀̇̓̀͌̓̏̑̔̑̀̈́͊͌͗͐͂̓̔̔̉͝ͅͅȩ̸̧̛̪͚̟̻͇͍̻̜͕̹̭̐͑̇͆̊̈́̀̏̒̈́̊̈́̿̅͐͛̅̾̇̎͌̂̃͊̈́̀̔͆̋̈́͗̇̐̈́͂̆͊̇̾̿̔̃̒́̈͊̅̓͌̀̾̿̂̃͑͑̕̕̚̕͘͜͝͝͝͠͝ͅx̴̣͔̰̞̳͓̮͖͖̤͍̦͈͎̝̠̝͓͖̫͓͙̮̙̥̻͙̖̳̟̭̤̿͋̂̈́̾̈́̉̅̎͐̽͌͒͊͊̽̉̉͛̉̿̉̐͊̽̈́́́͂̐͂̓͑͆̑͌͆̕̚̕͜͜͠ͅͅ
Ай, действительно забыли Ох уж этот zalgo. Эти пакостные символы должны находиться в промежутке #x0300-#x036f. Но preg_match("/[#x0300-#x036f]/") дает ошибку Код (Text): Warning: preg_match(): Compilation failed: range out of order in character class at offset 8 Зараза. Похоже, не может понять, как тут от и до считать. Ладно. Путем экспериментов было выявлено, что вот это: PHP: preg_match("/[#x030e]/", $account) позволяет отловить как символы над символом (t̓ë́ͬ̇ͦ̄ͨs̄̔t̎ͩͤ̉̉̅ͥ), так и под (t̝̥͇̣e̩s͙͚̞͚t̹) и на (t́e̸͢s̶̢t͟͜). То есть, все 3 возможных типа символов. Я не особо много игралась с такой проверкой. И вообще я за белый лист потому что ибо нефиг Есть еще вариант - как-то ограничить это безобразие через дизайн. То есть можно написать какое-то безобразие вместо ника, но дизайн страницы от этого никуда не поедет.
Делать свойство: overflow: hidden В ячейке, в которой находится имя. Даже если пользователь придумает что-то громоздкое - все, что будет выходить за рамки отведенного поля будет скрываться.
У нас на форуме Девушка появилась с мозгами!!!!!!!!!!! Боги микрокодинга услышали мою сирену --- Добавлено --- улыбка судьбы: https://php.ru/forum/members/hacker_farid.65254/ --- Добавлено --- не верный ответ
Когда ж закончатся эти "вылейте литр абсента в тазик, затем накрошите туда свежих мухоморов, сожрите что получилось и тогда вы сможете придумать логин и пароль под наши правила". А то вдруг непонятная закорючка взломает нашу базу и удалил сайт. хех ))
@Walk Как ранее мне советовали на форуме, не каких ограничений для ника не должно быть, самое главное правильно работать потом с ними.
Уже писал где то. dd(transliterator_transliterate('ASCII; Latin; ASCII;', 'A̴̧̨̡̨̨̛̛̤̖̖͚̱͕͔̹̬͇̪̦̘̖̳̰͇̳͙͍͎̻̪̤̖̱͚̜̩̩̳̼̰̤̬̘͙̼̰͇̟̣̰̦̖̤̰͍͔̼̖̹̻̗̱̱̺̗͚̼̖̺͕͐̀̾̍̀̍̄̄͗͊͂̂̂̀̐̈́̇͑̍̈́͂͗̿̾̀̒̍͊̉̾́͂̈́͒̈́̆͐̌͒͛̆̂͌͋͆̎̊̿̾̀̎̀̋͗̌̽͒͊̚̕͜͜͜͜͜͝͝͝͝͝ͅͅͅl̶̡̢̛̛͔͔̟̫̤̫͇̻̱̙͉̺̹͚͔̪͕͔̙̦̟͓̳̩̻̼̽̽̍̄̓̅̇̈́̈́̌́͗̒̄́̏̓̓̏̈̒̀̎͗͌̀̎͑̏̿̊̓̀́̀̍̈́̀̏͂̀͗͛̀̇̓̀͌̓̏̑̔̑̀̈́͊͌͗͐͂̓̔̔̉͝ͅͅȩ̸̧̛̪͚̟̻͇͍̻̜͕̹̭̐͑̇͆̊̈́̀̏̒̈́̊̈́̿̅͐͛̅̾̇̎͌̂̃͊̈́̀̔͆̋̈́͗̇̐̈́͂̆͊̇̾̿̔̃̒́̈͊̅̓͌̀̾̿̂̃͑͑̕̕̚̕͘͜͝͝͝͠͝ͅx̴̣͔̰̞̳͓̮͖͖̤͍̦͈͎̝̠̝͓͖̫͓͙̮̙̥̻͙̖̳̟̭̤̿͋̂̈́̾̈́̉̅̎͐̽͌͒͊͊̽̉̉͛̉̿̉̐͊̽̈́́́͂̐͂̓͑͆̑͌͆̕̚̕͜͜͠ͅͅ')); вернет Alex. Плюс с китайскими иероглифами поможет