Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 11-12-2015, 08:29 PM
Raakin Raakin is offline
 
Join Date: Jul 2008
Posts: 49
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default 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.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 10:05 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.06356 seconds
  • Memory Usage 2,179KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete