当字符串包含 & 符号时,在值末尾添加额外的分号

发布于 2024-12-11 12:01:43 字数 474 浏览 0 评论 0原文

我正在使用 Codeginiter,并且在使用 & 符号时看到字符串末尾添加了一个分号。见下文。顺便说一句,我正在将值存储到 MySQL 数据库中。

在将值插入数据库之前,我正在使用 htmlspecialchars

$this->form_validation->set_rules('item_name','description','trim|required|min_length[3]|xss_clean');       

这有效:

$string = "you & I";
// Displays "you & i"

这会在 DB 中附加一个分号:

$string = "you&i";   
// Displays "you&i;"

I'm using Codeginiter and I'm seeing a semicolon added to the end of my string when using an ampersand sign. See below. BTW, I'm storing the value into a MySQL DB.

I am using htmlspecialchars before I insert the value into the DB.

$this->form_validation->set_rules('item_name','description','trim|required|min_length[3]|xss_clean');       

This works:

$string = "you & I";
// Displays "you & i"

This appends a semicolon in DB:

$string = "you&i";   
// Displays "you&i;"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

全部不再 2024-12-18 12:01:43

您正在使用 CI 的 xss_clean “功能”,但该功能刚刚被破坏。如果您在某处应用了 xss_clean,请不要指望您的数据会保留下来。

相反,禁用它,一切都会好起来的。

然后适当过滤您的数据。 CodeIgniter 文档中实际使用 xss_clean 的建议只是误导性的。小心。

You're making use of the xss_clean "feature" of CI which is just broken. Don't expect your data to survive if you apply xss_clean somewhere.

Instead, disable it and things should be fine.

Then filter your data appropriately. The suggestion to actually use xss_clean is just misleading in the CodeIgniter documentation. Take care.

一身软味 2024-12-18 12:01:43

我认为这是因为 &i 被解释为实体。我建议您将所有 html 特殊字符(如 &<> 等)转换为各自的 html 实体。在 php 中,您可以使用 htmlspecialcharshtmlentities 函数。

I think this is because the &i is interpreted as entity. I suggest you to convert all the html special chars (as &, <, > and so on) with their respective htmlentities. In php you can do this using htmlspecialchars and htmlentities functions.

温柔少女心 2024-12-18 12:01:43

在将数据保存到数据库之前,POST 数据已经被污染。

顺便说一句,我也在使用 CI 框架。

示例,客户端发布数据
Cow&Gate/英国牛栏
使用普通形式的 post 方法,你会在 PHP 服务器端得到什么?

你会得到
Cow&Gate;/英国牛栏
奇怪的是,添加了分号

如果您使用 XML(或 ajax 或 jquery)发布数据,则可以在将数据发布到服务器之前使用 javascript 中的 encodeURIComponent 方法对数据进行编码,然后您将不需要在 PHP 服务器端做任何额外的工作。

像这样:
$.post('http-server-API', {"field":encodeURIComponent('Cow&Gate/英国牛栏')})

检查 PHP 服务器端的 $_POST 参数(无分号)将被添加)
输入图像描述这里

Before you to save data into database, the POST data has already been contaminated.

By the way I am using the CI framework too.

Example, Client Side post data
Cow&Gate/英国牛栏
using normal form post method, and what you would get in PHP Server Side?

You would get
Cow&Gate;/英国牛栏
Oddly, a semicolon has been added

If you are posting data with XML(or ajax or jquery), you can use the encodeURIComponent method in javascript to encode the data before you post it to server, and you would't need to do any extra work at the PHP Server Side.

Like this:
$.post('http-server-API', {"field": encodeURIComponent('Cow&Gate/英国牛栏')})

Check the $_POST params in PHP Server Side (no semicolon would been added)
enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文