Hey there,
I'm using the
AddonChat Integration Script and have been working with Chris Duerr, the author, to try and solve this problem: users that have special characters (such as accents, as in ? ? ? ? ?) are getting an invalid username/password notice. This is because vBulletin stores these special characters as HTML escape equivalents.
How can we convert the HTML escape characters to UTF-8 standard ascii characters?
Here is the code cited from the integration script:
Code:
<?php
header("Content-type: text/plain; charset=iso-8859-1");
error_reporting(E_ALL & ~E_NOTICE);
define('NO_REGISTER_GLOBALS', 1);
define('SESSION_BYPASS', 1);
define('LOCATION_BYPASS', 1);
//define('DIE_QUIETLY', 1);
/*
We lie a little here to let us get through when
forum read privileges are disabled for non-registered
users.
*/
define('THIS_SCRIPT', 'login');
$_REQUEST['do'] = 'register';
require_once('./global.php');
require_once('./chat_global.php');
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
/*
Uncomment the following to support non-ASCII UTF-8 characters
Requires PHP Multibyte String (mbstring) Extension
*/
$username = mb_convert_encoding($username, "HTML-ENTITIES", "UTF-8");
$password = mb_convert_encoding($password, "HTML-ENTITIES", "UTF-8");
if(!$SIGMACHAT_VB_AUTHENTICATE) die("DISABLED");
# Fetch User Info from Database..
$uid = 0;
if ($userinfo = $db->query_first('SELECT userid, usergroupid, membergroupids, password, salt FROM ' . TABLE_PREFIX . 'user WHERE username = "' . addslashes(htmlspecialchars_uni($username)) . '"'))
{
# Invalid Password
if (($userinfo['password'] != $password) && ($userinfo['password'] != md5(md5($password) . $userinfo['salt'])))
$auth = 0;
else
{
$usergroups = explode(',', $userinfo[membergroupids]);
$usergroups[] = $userinfo[usergroupid];
$auth = 0;
foreach($usergroups as $ug)
{
if( ($auth < 3) && (in_array($ug, $SIGMACHAT_AUTH_GRANTACCESS)) ) $auth = 3;
if( ($auth < 2) && (in_array($ug, $SIGMACHAT_AUTH_ADMINACCESS)) ) $auth = 2;
if( ($auth < 1) && (in_array($ug, $SIGMACHAT_AUTH_ACCESS)) ) $auth = 1;
if(in_array($ug, $SIGMACHAT_AUTH_NOACCESS)) { $auth = 0; break; }
}
$uid = $userinfo['userid'];
}
}
else
$auth = $SIGMACHAT_AUTH_GUEST;
$result_string = "SCRAS^1.1\nAUTH^$auth\nUID^$uid\n";
if($SIGMACHAT_ENABLE_LINK_PROFILE) $result_string .= "SITE_LINK^Profile^$SIGMACHAT_FORUM_URL/chat_func_profile.php\n";
if($SIGMACHAT_ENABLE_LINK_ADDBUDDY) $result_string .= "SITE_LINK^Add Buddy^$SIGMACHAT_FORUM_URL/chat_func_addbuddy.php\n";
if($SIGMACHAT_ENABLE_LINK_PM) $result_string .= "SITE_LINK^Prv. Message^$SIGMACHAT_FORUM_URL/chat_func_pm.php\n";
if($SIGMACHAT_ENABLE_LINK_EMAIL) $result_string .= "SITE_LINK^eMail^$SIGMACHAT_FORUM_URL/chat_func_email.php\n";
if($SIGMACHAT_ENABLE_LINK_FINDPOSTS) $result_string .= "SITE_LINK^Find Posts^$SIGMACHAT_FORUM_URL/chat_func_findposts.php\n";
if($SIGMACHAT_ENABLE_LINK_FORUM_IGNORE) $result_string .= "SITE_LINK^Forum Ignore^$SIGMACHAT_FORUM_URL/chat_func_ignore.php\n";
print($result_string);
?>
Update -- I've tried using html_entity_decode by calling as follows:
Code:
$username = html_entity_decode($username);
$password = html_entity_decode($password);
... where the "uncomment the following" comment is indicated in the above code. That didn't work, tragically.