【问题标题】:MySQL isn't alowing me to have '<' or '>' as a valueMySQL 不允许我将 '<' 或 '>' 作为值
【发布时间】:2013-03-15 20:33:29
【问题描述】:

我正在尝试从文本框中读取文本并将其存储到我的数据库中。我的数据库的安全性是第一位的,特殊字符是第二位的。目前用户可以使用基本的特殊字符 (!@#...ect),但不能大于或小于 () 或 (☺☻♥)。

这就是代码目前的样子。

$temp = $tableName.".".$fieldName." = '".mysql_real_escape_string(strip_tags($fieldValue))."'";

当我输入&lt;&gt; 时,我的数据库中收到空白。 和 当我输入 时,我收到? 作为输入。

对此的任何输入都会很好。谢谢你。

【问题讨论】:

  • 因为 strip_tags() 实际上并不验证 HTML,部分或损坏的标签可能会导致删除比预期更多的文本/数据。引用自http://php.net/strip_tags
  • mysql_* 函数已弃用。您应该使用 mysqli 或 PDO

标签: html mysql special-characters html-escape-characters


【解决方案1】:

它与数据库无关,它与从字符串中去除 HTML 和 PHP 标记的 strip_tags() 函数有关

【讨论】:

  • 第一部分是对的。其他字符可能显示为?,因为表格上的字符集不支持这些字符
  • 其实可以的。 m_r_e_s 需要实时连接到 DB 才能运行,这意味着 db 设置 CAN 垃圾字符串。
【解决方案2】:

当我输入“”时,我的数据库中收到空白。

strip_tags 方法就是这样做的

当我输入“☺”或“☻”时,我收到“?”作为输入。

这是encoding 的问题。

至于

我的数据库的安全性是第一要务

我建议您将代码迁移到准备好的语句(mysqli 或 pdo)。

【讨论】:

  • 嗯,我正在努力迁移到 mysqli,但目前我不能解决这个问题。
【解决方案3】:

使用htmlentitieshtmlspecialchars 代替剥离标签。剥离标签从字符串中删除任何 HTML 标签。我提到的两个函数将 HTML 标记转换为 html 实体(该字符的文本表示,例如 &amp;lt;),这意味着它们可以作为文本输出到页面上,而不会被浏览器解析为 HTML。

【讨论】:

  • 好的,所以现在代码读取 = '".mysql_real_escape_string(htmlentities($fieldValue))."'"; 当我输入 '' 时它可以正常工作但是当我输入 '☺ '(alt + 1) 我收到 â?º
【解决方案4】:

谢谢你们的帮助。我发现了这个问题。由于数据库原因,我正在编辑的代码将特殊字符代码从 '&' 更改为 %HEX。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2014-09-05
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多