Wsparcie » Instalacja » Dozwolne znaki w nazwie użytkownika

Viewing 6 replies - 1 through 6 (of 6 total)
  • 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 na true ?

    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. 😉

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Dozwolne znaki w nazwie użytkownika’ is closed to new replies.