vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Unable to edit usernames with special characters (https://vborg.vbsupport.ru/showthread.php?t=320771)

Raakin 11-12-2015 08:29 PM

Unable to edit usernames with special characters
 
I have recently converted the character set to UTF-8 on my forum.
  • Uncommented the UTF-8 line in config.php
  • Changed the char set settings in AdminCP -> Languages to UTF-8
  • Converted whole database (as well as tables and their columns) to utf8_general_ci collation from latin1
  • Updated Thread info, Forum info and Usernames from Maintenance -> General Update tools

Now when I try to edit a user with special characters in admincp, it gives an error saying another user exists with the same username (with no special characters).

It seems this is the code from class_dm_user.php file that check the usernames while saving the user:
PHP Code:

    function verify_username(&$username)
    {
        
// fix extra whitespace and invisible ascii stuff
        
$username trim(preg_replace('#[ \r\n\t]+#si'' 'strip_blank_ascii($username' ')));
        
$username_raw $username;
        
$charset vB_Template_Runtime::fetchStyleVar('charset');
        
$callback = new Convert_unicode_char_to_charset_callback($charset);

        
$username preg_replace_callback(
            
'/&#([0-9]+);/i',
            array(
$callback'callback'),
            
$username
        
);

        
$username preg_replace_callback(
            
'/�*([0-9]{1,2}|1[01][0-9]|12[0-7]);/i',
            
'convert_int_to_utf8_callback',
            
$username
        
);

        
$username str_replace(chr(0), ''$username);
        
$username trim($username);

        
$length vbstrlen($username);
        if (
$length == 0)

// skipped unrelated if conditionals for clarity /////////////////////////

        
else if (htmlspecialchars_uni($username_raw) != $this->existing['username'] AND $user $this->dbobject->query_first("
            SELECT userid, username FROM " 
TABLE_PREFIX "user
            WHERE userid != " 
intval($this->existing['userid']) . "
            AND
            (
                username = '" 
$this->dbobject->escape_string(htmlspecialchars_uni($username)) . "'
                OR
                username = '" 
$this->dbobject->escape_string(htmlspecialchars_uni($username_raw)) . "'
            )
        "
))
        {
            
// name is already in use
            
if ($this->error_handler == ERRTYPE_CP)
            {
                
$this->error('usernametaken_edit_here'htmlspecialchars_uni($username), $this->registry->session->vars['sessionurl'], $user['userid']);
            }
            else
            {
                
$this->error('usernametaken'htmlspecialchars_uni($username), $this->registry->session->vars['sessionurl']);
            }
            return 
false;
        } 

How can I resolve this?

--------------- Added [DATE]1447388506[/DATE] at [TIME]1447388506[/TIME] ---------------

This problem occurs only if two users have same username, one of them in plain text and another with some special characters.

For example, usernames "User" and "?ser". It won't recognize the second one as unique username.


All times are GMT. The time now is 08:08 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01330 seconds
  • Memory Usage 1,736KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (1)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete