2013-11-25 27 views
0

我遇到了一些代碼問題。 我有一些聊天機器人回覆$name誰聊天。如何使用PHP回覆一個特殊字符值字符串而不會獲得空白值

preg_match('%<b class="(.*)">(.*)</b>%U', $mess, $mem); 
$name = $mem[2]; 

if (strpos($chat, 'alt="thanks"/>') != 0 && strpos($chat, 'Bot') != 0 || strpos($chat, 'alt="thanks"/>') != 0 && strpos($chat, 'Bot') != 0 || strpos($chat, 'alt="thank"/>') != 0 && strpos($chat, 'bot') != 0 || strpos($chat, 'alt="thank"/>') != 0 && strpos($chat, 'bot') != 0) 

$mess1 = "[color=blue][big][b]@[/b][/big][/color] [color=blue][b]".$name."[/color] You Are Most welcome [/b]"; 

if ($bot_start==true) post_cbox($mess1);  

$log = fopen($chat_file,"w"); 

$data = $date.'-'.$chat.'|'; 

fwrite($log, $data);  

fclose($log); 

我的問題是,當機器人回覆給用戶$name如果$name包含特殊字符它將回復空白名稱。 例如:$ name =或{name它會回覆空白名稱,只有@(空白)沒有名字。 有沒有辦法編輯這個工作而不使用str_replace? 因爲我已經看到有人固定的代碼回覆名稱即使它有特殊字符

由於提前

+0

'preg_match'過濾器是什麼?爲什麼? – MeNa

+0

@MeNa,preg_match是從聊天表中獲取用戶名。 – GuestofHonor

+0

這是關於用特殊字符返回空白名稱的條件? – MeNa

回答

0

試試這個。不會給你特殊的字符,但會解決一些問題。

preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. 
+0

我試圖找到一種不使用替換函數的方法 謝謝 – GuestofHonor

+0

您是否使用特殊字符的ISO代碼?http://www.w3schools.com/tags/ref_entities.asp –

+0

的名稱是在UTF8,我不是親:) – GuestofHonor

0

一些選項:

1)把一個正則表達式在客戶端,以避免使用特殊字符的用戶(很容易繞過,但你可能不關心安全出於某種原因)。

2)如果用戶名在字符串中的正常位置,可以使用substrsee here

或者如果用戶名前面有一個常規字符串,則可以使用striposhere),然後使用substr

+0

你可以看到這裏的機器人:http://adf.ly/QxlwC – GuestofHonor

相關問題