第 1 頁 (共 1 頁)
[問題]會員註冊問題(特別的國字不能註冊!?)[已解決]
發表於 : 2006-02-06 17:05
由 blair520
●架設主機作業系統:Windows Xp
●上網方式:ADSL
●phpBB2 版本:竹貓星球phpBB-2.0.19 UTF-8
●phpBB2 連結網址:
http://blair80081.php2h.com/phpBB2/
●已安裝外掛:無\r
我有一位會員要註冊
他想要用的ID是 沙漠北極熊
結果他註冊時系統卻告訴他
【很抱歉!! 會員名稱內不得包含非法字元, 例如: ''】
之後我幫他註冊也是一樣出現↑
請問竹貓的好心腸的大大們幫幫小弟我>"<
到底問題出在哪裡呢?>"<非常的感謝您
發表於 : 2006-02-06 21:48
由 心靈捕手
系統訊息的意思是說 '沙漠裡不應該有北極熊' .
--
抱歉! 以上是在說冷笑話.
--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.
以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
/*// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
發表於 : 2006-02-06 21:54
由 blair520
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .
--
抱歉! 以上是在說冷笑話.
--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.
以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
/*// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
感恩大大的回答~勞煩您了~真不好意思

大大我有找到可是那邊多了一個東西ㄝ...
發表於 : 2006-02-06 22:03
由 blair520
大大我有找到你寫的代碼可是那邊多了一個東西ㄝ...
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .
--
抱歉! 以上是在說冷笑話.
--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.
以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
/*// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
在
代碼: 選擇全部
['Username_invalid']);
後面多了一個
是\r
代碼: 選擇全部
return array('error' => false, 'error_msg' => '');
請問這個有要緊嗎?還是在後面跟您說的一樣加上*/呢?
><
發表於 : 2006-02-06 22:05
由 blair520
由於我前天才開始學做論壇
所以我問題會很多很多><"
還請大大們多多指教><
發表於 : 2006-02-06 22:10
由 心靈捕手
不必!
以下是原始函式語法完整擷取:
代碼: 選擇全部
function validate_username($username)
{
global $db, $lang, $userdata;
// Remove doubled up spaces
$username = preg_replace('#\s+#', ' ', trim($username));
$username = phpbb_clean_username($username);
$sql = "SELECT username
FROM " . USERS_TABLE . "
WHERE LOWER(username) = '" . strtolower($username) . "'";
if ($result = $db->sql_query($sql))
{
while ($row = $db->sql_fetchrow($result))
{
if (($userdata['session_logged_in'] && $row['username'] != $userdata['username']) || !$userdata['session_logged_in'])
{
$db->sql_freeresult($result);
return array('error' => true, 'error_msg' => $lang['Username_taken']);
}
}
}
$db->sql_freeresult($result);
$sql = "SELECT group_name
FROM " . GROUPS_TABLE . "
WHERE LOWER(group_name) = '" . strtolower($username) . "'";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
$db->sql_freeresult($result);
return array('error' => true, 'error_msg' => $lang['Username_taken']);
}
}
$db->sql_freeresult($result);
$sql = "SELECT disallow_username
FROM " . DISALLOW_TABLE;
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
do
{
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['disallow_username'], '#')) . ")\b#i", $username))
{
$db->sql_freeresult($result);
return array('error' => true, 'error_msg' => $lang['Username_disallowed']);
}
}
while($row = $db->sql_fetchrow($result));
}
}
$db->sql_freeresult($result);
$sql = "SELECT word
FROM " . WORDS_TABLE;
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
do
{
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['word'], '#')) . ")\b#i", $username))
{
$db->sql_freeresult($result);
return array('error' => true, 'error_msg' => $lang['Username_disallowed']);
}
}
while ($row = $db->sql_fetchrow($result));
}
}
$db->sql_freeresult($result);
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
return array('error' => false, 'error_msg' => '');
}
您所指的部份, 應該是在 '}' 之後吧!?
啊~對不起><"
發表於 : 2006-02-06 22:15
由 blair520
眼睛脫窗了><"我把*/
加到\r
代碼: 選擇全部
return array('error' => false, 'error_msg' => '');
}
後面去了=..=+
><"
發表於 : 2006-02-06 22:21
由 blair520
blair520 寫:眼睛脫窗了><"我把*/
加到\r
代碼: 選擇全部
return array('error' => false, 'error_msg' => '');
}
後面去了=..=+
加到後面去的錯誤是\r
會員管理->管理選項
會找不到網頁
非常感謝大大的教導~小弟會努力把論壇做好
小弟的濫論壇有時候會找不到網頁~
真的不知道為什麼會這樣子捏~空間的關係嗎?

發表於 : 2006-08-27 16:58
由 jeswang.tw
這段 mark 掉之後,如果有人用 Alt-255 輸入註冊,會發生什麼事?

發表於 : 2007-02-05 14:04
由 阿維
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .
--
抱歉! 以上是在說冷笑話.
--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.
以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
/*// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
這個修正好像跟 Custom mass PM 1.4.7 其中一個的步驟有衝突
代碼: 選擇全部
#
#-----[ OPEN ]------------------------------------------------
#
includes/functions_validate.php
#
#-----[ FIND ]------------------------------------------------
#
// Don't allow
if (strstr(
#
#-----[ IN-LINE FIND ]----------------------------------------
#
, chr(160))
#
#-----[ IN-LINE AFTER, ADD ]----------------------------------
#
|| strstr($username, ';')
剛好是在註解的範圍內,請問該如何解決呢?
發表於 : 2007-02-05 15:36
由 心靈捕手
JORDAN 寫:心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .
--
抱歉! 以上是在說冷笑話.
--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.
以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
/*// Don't allow " and ALT-255 in username.
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
{
return array('error' => true, 'error_msg' => $lang['Username_invalid']);
}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
這個修正好像跟 Custom mass PM 1.4.7 其中一個的步驟有衝突
代碼: 選擇全部
#
#-----[ OPEN ]------------------------------------------------
#
includes/functions_validate.php
#
#-----[ FIND ]------------------------------------------------
#
// Don't allow
if (strstr(
#
#-----[ IN-LINE FIND ]----------------------------------------
#
, chr(160))
#
#-----[ IN-LINE AFTER, ADD ]----------------------------------
#
|| strstr($username, ';')
剛好是在註解的範圍內,請問該如何解決呢?
這個修正, 不會影響 'Custom mass PM 1.4.7' 的功能.
建議您:
忽略它 (安裝 'Custom mass PM 1.4.7' 時, 省掉這個修改).
發表於 : 2007-03-13 21:40
由 Fujirou
我最近也遇到這個問題
後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");
沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題
發表於 : 2007-03-15 02:30
由 hsientsung
Fujirou 寫:我最近也遇到這個問題
後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");
沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題
想請問依照您這樣子的修改方式,您目前還有出現任何問題嗎?
或者之後還有出現任何問題嗎?
發表於 : 2007-03-18 02:23
由 Fujirou
hsientsung 寫:Fujirou 寫:我最近也遇到這個問題
後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");
沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題
想請問依照您這樣子的修改方式,您目前還有出現任何問題嗎?
或者之後還有出現任何問題嗎?
改了之後,大約四、五個人註冊,目前還沒有聽到有問題回報。
發表於 : 2007-08-31 01:15
由 Hans Tsai
分享一下我處理這個問題的結果
基本上是正常的
幾個會碰到問題的字
如
熊 堡 砂 等等...
經修改後都可正常使用
我處理的方法
#
#-----[ OPEN ]-----
#
includes/functions_validate.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
// Don't allow " and ALT-255 in username.
#
#-----[ After Add ]-----
#
代碼: 選擇全部
mb_internal_encoding("UTF-8");
#
#-----[ FIND ]-----
#
代碼: 選擇全部
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
if (mb_strstr($username, '"') || mb_strstr($username, '"') || mb_strstr($username, chr(160)))
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
目前已經用了7天
註冊近百人
都沒發生過問題
