【问题标题】:Replacing characters with smileys from echoed row用回显行中的笑脸替换字符
【发布时间】:2018-03-04 00:53:57
【问题描述】:

我无法弄清楚这一点,也不是我编码以太的强项。

截至目前,它只会打印第一人称和时间戳,而不是其他任何内容。

<table cellpadding="0" cellspacing="0" width="100%">
<tr><td></td></tr>

<?php
include '../connection.php';  



$sql = "SELECT * 
FROM messagebox
INNER JOIN person
ON messagebox.sid = person.sid
ORDER BY messagebox.id DESC
LIMIT 20
";
$query = mysql_query($sql);
while($row = mysql_fetch_array($query))
{
if ($switch=='1')
{
echo "<tr bgcolor=\"#FFFFFF\">";
$switch='0';
}
else
{
echo "<tr bgcolor=\"#F9F9F9\">";
$switch='1';
}

$elfstring = utf8_encode($row['shout']);

function smiley($elfstring) { 
      $elfstring = ereg_replace(":)","<img src=!.png alt=\"!\" >", $elfstring); 
      $elfstring = ereg_replace(":(","<img src=laugh.gif alt=\":D\" >", $elfstring); 
      $elfstring = ereg_replace(":p","<img src=tongue.gif alt=\":p\" >", $elfstring); 
      return $elfstrings; 

}
$messages = smiley($elfstring);

echo "";
   
echo "<td width=\"100\" valign=\"top\"><strong>" . $row['name'] . "</strong></td>";
 
echo "<td width=\"100\" valign=\"top\">" . "(" . $row['place'] .")</td>";
echo "<td width=\"70\" valign=\"top\">" . "" . date('H:i:s',strtotime ($row['timestamp'])) ."</td>";
echo "<td valign=\"top\">" . smiley($elfstrings) . "</td>";
echo "</tr>";

} 
?>

<tr>
<td>

</td>
</tr>
</table>

我知道此代码的某些部分已被弃用,但使用此代码的服务器很旧且不是最新的。

提前感谢您的帮助。

【问题讨论】:

  • ereg_ 函数在很久以前就被弃用了。如果您需要使用正则表达式,请改用 preg_ 函数。但是在这里你没有理由使用正则表达式,因为你只想替换静态搜索字符串 - 所以 str_replace 就可以了。
  • 您确定使用该精确查询的结果不止一个?
  • 它应该从消息框打印 20 行,现在它打印 1 并且消息没有回显。
  • 不确定我是否关注你...
  • 笑脸函数中的变量称为“elfstring”。但是您正在返回“elfstrings”(注意末尾的 S)。 elfstrings 变量不存在,因此您的函数不返回任何内容

标签: php regex function ereg-replace


【解决方案1】:
  1. 您不能多次声明一个函数。将function smiley(){ 移到while 循环之外。
  2. 您应该启用错误报告并监控您的错误日志。
  3. 您应该缩进每个控制块,以便您可以轻松地判断块的结束/开始位置。
  4. 如果您不需要正则表达式/不使用正则表达式,请不要使用正则表达式函数。 () 是特殊的正则表达式字符,会导致错误。使用str_replace,因为无论如何您都在进行静态替换。
  5. 您可以将字符串括在"' 中,这样可以简化字符串构造,因为您不需要转义。

所以结束你的脚本:

function smiley($elfstring) { 
      return str_replace(array(':)', ':(', ':p'),  
                         array('<img src="!.png" alt="!" >', '<img src="laugh.gif" alt=":D" >', '<img src="tongue.gif" alt=":p" >'), 
                          $elfstring); 
}

【讨论】:

  • 行得通!但是我如何正确地回显它? echo "&lt;td valign=\"top\"&gt;" . smiley($elfstrings) . "&lt;/td&gt;"; 不回应任何内容。
  • $elfstrings 是否实际已填充?试试var_dump($row['shout']); var_dump($elfstrings);,你会得到什么?
  • 在两者上都获得 NULL 值,但它们已填充到数据库中……知道了,我设法删除了 elfstring 的定义。谢了!
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多