首页 > 解决方案 > PHP Laravel 未解码 MySQL 表中检索到的项目中的特殊字符 &

问题描述

我面临一个关于解码特殊字符的问题,特别是 & 字符。

设置

前端:Angular-6/Typescript

后端:PHP/Laravel 和 Eloquent

数据库:MySQL

浏览器:铬

问题

使用 Javascript,我使用简单的基于文本的输入表单以 JSON 格式发送数据。测试时,我使用“Me & You”作为测试字符串。但是,在浏览器的网络选项卡中,我注意到 JSON 数据采用以下形式

book: {
    title: "Me & You"
...
}

PHP/Laravel 将这个字符串保存在数据库中 ( Me & You)。由于我也在检索标题,甚至我的前端文本字段也会显示Me & You

要求的行为

无论如何它都应该保存字符串 ( Me & You) 但在检索条目之前,它应该转义特殊字符,以便我收到Me & You.

任何其他建议也将不胜感激。我只需要转义 & 字符。

我已经尝试过的

我尝试了以下方法来解决问题,但无济于事:

  1. 在使用 Laravel 的save函数保存模型之前,我使用htmlspecialchars_decode()解码字符串,但它仍然Me & You在数据库和前端给我。
    $title= htmlspecialchars_decode($title);
  1. 我试过html_entity_decode了,但仍然没有运气。
    $title= html_entity_decode($title);
  1. 我也在检索标题,所以我想不是解码字符串,而是让它保存字符串,就像它在表中一样。但是当我检索标题时,我会对它们进行解码,然后通过响应将它们返回给前端。
    foreach ($user->books as &$book) {
       $book['title'] = urldecode(($book['title']));
    }

但我仍然收到Me & You。请注意,这里我使用的是引用,因为起初我认为 foreach 循环正在创建一个新的临时变量,而不是更改原始值。

  1. 在javascript中,我尝试使用encodeURIComponent()
 book.title = encodeURIComponent(book.title);

这给了我Me%20%26%20You

在 PHP 中,我然后尝试使用urldecode()等,htmlspecialchars_decode()但我仍然得到Me & You.

任何帮助,将不胜感激。

谢谢你。

标签: javascriptphpangularlaraveleloquent

解决方案


推荐阅读