Laminas Framework Flash Messenger创建时空格转+符号问题修复咨询
Laminas Framework Flash Messenger 创建操作空格变“+”问题修复
问题现象
在Laminas Framework中使用Flash Messenger时,仅创建操作的消息空格会被替换为“+”符号,更新操作完全正常:
- 创建操作消息(异常):

- 更新操作消息(正常):

执行var_dump($message['success'])时,消息内容显示正常(空格存在):
相关代码
创建操作代码
// success $text = $this->translate('The group %s has been created successfully.'); $message['success'] = sprintf($text, $group['name']); $cookie = new SetCookie('newGroup', $group['name'], time() + 30, '/'); $this->getResponse()->getHeaders()->addHeader($cookie); if (isset($post['isAPIData']) && $post['isAPIData'] == 1) { $isAPIResponse = 1; } else { if (!$request->isXmlHttpRequest()) { $this->flashMessenger()->addSuccessMessage($message['success']); return $this->redirect()->refresh(); } }
更新操作代码
// success $text = $this->translate('The group %s has been updated successfully.'); $message['success'] = sprintf($text, $group['name']); if (isset($post['isAPIData']) && $post['isAPIData'] == 1) { $isAPIResponse = 1; return [ 'message' => $message, 'isAPIResponse' => $isAPIResponse ]; } else { if (!$request->isXmlHttpRequest()) { $this->flashMessenger()->addSuccessMessage($message['success']); $this->redirect()->refresh(); } }
修复方案
方案1:渲染Flash消息时解码
问题根源是消息在传递到客户端过程中被URL编码(空格转“+”),因此在视图渲染Flash消息时,对消息执行urldecode()解码:
原视图渲染代码(示例):
foreach ($this->flashMessenger()->getSuccessMessages() as $msg) { echo '<div class="alert alert-success">' . $msg . '</div>'; }
修改后:
foreach ($this->flashMessenger()->getSuccessMessages() as $msg) { echo '<div class="alert alert-success">' . urldecode($msg) . '</div>'; }
urldecode()会将“+”还原为空格,且对未编码的正常消息无影响,不会破坏更新操作的正常显示。
方案2:规范Cookie值编码(可选)
创建操作中设置的newGroup Cookie未做编码处理,虽然和Flash消息问题无直接关联,但按Cookie规范,建议对Cookie值进行编码:
// 对Cookie值进行URL编码 $cookieValue = rawurlencode($group['name']); $cookie = new SetCookie('newGroup', $cookieValue, time() + 30, '/'); $this->getResponse()->getHeaders()->addHeader($cookie);
后续读取该Cookie时,使用rawurldecode()解码即可。
内容的提问来源于stack exchange,提问作者Tharisha Perera
相关产品推荐
相关产品推荐

