当用户在我的聊天应用程序中添加$ keyword时,我想删除$符号。 $ keyword不是变量,它是一个包含$来触发关键字的字符串。
这是我的代码:
<?php
class Chat extends DB {
public function get_Messages() {
$rows = DB::getInstance()->query("SELECT * FROM ( SELECT user,message,TS FROM chat ORDER BY TS DESC LIMIT 50 ) sub ORDER BY TS ASC");
foreach ($rows->results() as $row) {
$str=$row->message;
$stocklist = '$AAPL'; << doenst convert to link when containing $
echo $row->TS . '<br/><strong>' .$row->user . '</strong> says: <br/>';
echo preg_replace("/(".$stocklist.")/s","<a href='http://finance.yahoo.com/q?s=$1'>$1</a>",$str) . '<br/><br/>';
}
}
public function send_Message($user, $message) {
if (!empty($user) && !empty($message)) {
$user = mysql_real_escape_string($user);
$message = mysql_real_escape_string($message);
$send = DB::getInstance()->insert('chat', array(
'id' => null,
'user' => $user,
'message' => $message
));
if ($send = true) {
return true;
} else {
return false;
}
} else {
return false;
}
}
}
我已经排除了一些错误,现在唯一的问题是字符串$ APPL没有转换为链接。如果我将$ AAPL更改为APPL,则转换为链接。我需要$ AAPL作为链接。
由于
答案 0 :(得分:1)
好的,我已根据问题中的更新修改了我的答案。使用preg_replace_callback():
尝试此操作$str = 'This is a $link this is not a link.';
$str = preg_replace_callback(
'/\$([a-z]+)/i',
function($match) {
$white_list = Array();// Array of all the valid links, any other match will not be replaced
return in_array($match[1], $white_list) ? ('<a href="http://finance.yahoo.com/q?s='.$match[1].'">'.ucfirst($match[1]).'</a>') : '$'.$match[1];
},
$str
);
var_dump($str); // Outputs: string(82) "This is a <a href="http://finance.yahoo.com/q?s=link">Link</a> this is not a link."