Dozwolne znaki w nazwie użytkownika
-
Jakie znaki oprócz liter i cyfr są dozwolone w nazwie użytkownika?
-
Podkreślenie, pauza, spacja, małpa i kropka
Patrz https://codex.wordpress.org/Function_Reference/sanitize_user – chociaż w opisie jest tam drobna nieścisłość. Wspomniana jest tam jeszcze gwiazdka, która jednak nie jest dozwolona.
Na potwierdzenie komentarz z pliku formatting.php* Removes tags, octets, entities, and if strict is enabled, will only keep
* alphanumeric, _, space, ., -, @. After sanitizing, it passes the username,
* raw username (the username in the parameter), and the value of $strict as
* parameters for the {@see 'sanitize_user’} filter.Paweł Knapek, dziękuję za odpowiedź!
Dopytam o jeszcze jedną rzecz: Czemu służy ta funkcja:
function sanitize_user( $username, $strict = false )
?I co zmienia ustawienie wartości
$strict
natrue
?Ta funkcja odpowiada własnie za filtrowanie znaków w nazwie użytkownika.
Parametr strict przełącza między trybem mniej i bardziej restrykcyjnym.
W mniej restrykcyjnym wycinane są tagi, akcenty, oktety, encje oraz niwelowane spacje.
W trybie restrykcyjnym wycinane jest dodatkowo wszystko poza znakami alfanumerycznymi, spacją, kropką, podkreśleniem pauza i małpą …i ten zasadniczo jest i tak wykorzystywany w WP.Bardziej obrazowo, wrzucając na wejście przykładowego 31-znakowego stringa:
Wąski Bob <br> %0_9 ^A-Z @.,#x!
z parametrem strict ustawionym na false dostaniemy na wyjściu 26-znakowego:
Waski Bob %0_9 ^A-Z @.,#x!
ale na true dostaniemy już tylko 21 znaków:
Waski Bob 0_9 A-Z @.x
Chyba nie rozumiem… W moim przypadku strict ustawiony jest na false, ale gdy próbuję zarejestrować proponowanego przez Ciebie użytkownika:
Wąski Bob <br> %0_9 ^A-Z @.,#x!
otrzymuję komunikat:
BŁĄD: Podana nazwa użytkownika jest nieprawidłowa, ponieważ zawiera niedozwolone znaki. Proszę wprowadzić prawidłową nazwę użytkownika.
Nie ma tak prosto. To tylko deklaracja źródłowej funkcj …istotne jest to, gdzie i jak jest wywoływana – a jest wywoływana w różnych miejscach własnie z TRUE.
Dodatkowo jest jeszcze robiona walidacja – wpisany użytkownik jest porównywany ze zwrotką ww. i jeżeli są różne, dostajesz komunikat błędu jw.Obejście można zrobić korzystając z filtru.
W functions.php motywu wrzucasz np.:add_filter ('sanitize_user', 'custom_sanitize_user', 10, 3); function custom_sanitize_user( $username, $raw_username, $strict = false ) { $username = $raw_username; $username = wp_strip_all_tags( $username ); $username = remove_accents( $username ); $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); $username = preg_replace( '/&.+?;/', '', $username ); // If strict, reduce to ASCII for max portability. if ( $strict ) { //$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username ); } $username = trim( $username ); $username = preg_replace( '|\s+|', ' ', $username ); return $username; }
W powyższym tryb strict został całkowicie wyłączony ( zakomentowana linijka ).
Można oczywiście ten filtr modyfikować dodatkowo pod siebie.To już dla mnie poziom zbyt zaawansowany… Tak czy inaczej, dziękuję za informacje. 😉
- Temat ‘Dozwolne znaki w nazwie użytkownika’ jest zamknięty na nowe odpowiedzi.