某些字符让php字符串搞砸了

时间:2013-01-11 20:19:50

标签: php html xhtml

我有一个foreach循环,可以在用户的​​收件箱中显示所有“已读邮件”:

        foreach ($tmpArray as $array) {
            if ($array['message_parent_id'] == 0) {
                $convo = $this->model->getConvoArray($array['message_id']);
                $array['message_datetime'] = $convo[sizeof($convo) - 1]['message_datetime'];
                $lastMessage = $this->model->getLastReply($array['message_id']);
                if ($_SESSION['username'] == $lastMessage['message_sender']) {
                    $messageBody = "<b>&lArr;</b> " . $lastMessage['message_body'];
                } else {
                    $messageBody = $lastMessage['message_body'];
                }
                $array['message_body'] = $messageBody;
            }
            array_push($readMail, $array);
            //echo PrettyDate::convert($array['message_datetime']);
            //echo "<br />";
        }

然而,当$ lastMessage ['message_body'] ==“&lt;(^ _ ^&lt;)Kirby!”我得到$ array ['message_body'] ==“by!”。但是当$ lastMessage ['message_body'] ==“&lt;(^ _ Kirby!”它正确存储在$ array ['message_body']中作为“&lt;(^ _ Kirby!”。不完全确定发生了什么。我试过的所有其他案例都很好。

当我拿出 围绕&amp; lArr时,它会起作用。我猜它与此有关。

2 个答案:

答案 0 :(得分:2)

在htmlentities()中包装$ lastMessage [&#39; message_body&#39;],它应该可以解决您的问题。

$lastMessage['message_body'] = htmlentities($lastMessage['message_body']);

答案 1 :(得分:1)

由于此字符串具有&gt;在其中,浏览器可以将其视为HTML元素。要修复此通行证$lastMessage['message_body']htmlentities()

htmlentities($lastMessage['message_body']);