包含双引号的字符串在DB中插入不完整

时间:2010-09-15 09:46:31

标签: php escaping double-quotes

Updated 我在表单中提供的textarea将用户输入作为字符串

包含双引号的字符串在DB ..中插入不完整。

我在文本区域插入了一个字符串

  

“不要太担心   布局/设计/文字大小,我们会经常   “调味”(即粗体,斜体,   间隔)你的横幅更好   整体看。

当我将字符串插入DB时,字符串结束于

  

不要太担心   布局/设计/文字大小,我们经常会

并且部分插入..我该怎么做才能插入所有单引号和双引号?

  

编辑请求

下面是我使用php

在数据库中插入的查询
  

“插入到products_description中   (products_id,products_name,   products_logo_name1,   products_logo_name2,   products_logo_name3,   products_description)值('“。   (int)$ products_id。 “','banner_”。   $ products_id。   “ ''”。$ _ POST [ 'logoimage1']“。“,   ' “$ _ POST [ 'logoimage2']”。',   ' “$ _ POST [ 'logoimage3']”。',   “” .mysql_real_escape_string($ _ POST [ '描述'])。 “')”

这里mysql_real_escape_string($ _ POST ['description'])没有转义双引号,因此在插入时会截断应该做什么?

5 个答案:

答案 0 :(得分:5)

转义字符串中的双引号,如下所示:

$theString = "Hello, i wonder what all these \"quotes\" are doing in here...";

反斜杠会告诉编译器忽略下面双引号的“含义”,并将其视为普通字符(这就是我们所谓的“逃逸”)。

使用用户输入时也检查mysql_real_escape_string()(这将自动转义字符串中的所有危险元素,以便在mySQL数据库中使用)。

答案 1 :(得分:3)

LOL
没有读完整个问题,但我确信我知道答案

它被插入到数据库中,然后检索好了,然后进入 HTML表单的字段值... ; - )

嗯,认真。
您必须一步一步地跟踪您的数据 在你的应用程序中有一些邪恶的代码,这会产生一些邪恶的东西 您必须关注您的数据流并检查它被破坏的阶段 只需按以下步骤打印您的数据:

  • 收到表格数据后
  • 插入数据库之前
  • 从数据库中检索后
  • 在打印回表格之前

这是你的一般错误:你将多阶段过程作为一个步骤 你看到你的字符串被插入到textarea中,下次你在这个textarea中看到它被截断了。你认为是数据库问题。虽然你不能这么肯定 - 有许多步骤不涉及数据库。将您的应用视为不是一个固定的块,而是作为多个阶段的过程。

答案 2 :(得分:0)

如果来自用户输入,请使用函数mysql_real_escape_string()

  

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a。

     

在向MySQL发送查询之前,必须始终使用此函数(少数例外)使数据安全。

答案 3 :(得分:0)

你需要逃避你的报价。

如果您的数据库是MySQL,请在将所有数据保存到数据库之前通过mysql_real_escape_string()函数传递所有数据。

如果你不这样做,你的代码就会面临重大安全漏洞,而不仅仅是数据丢失!

(如果你还没有这样做,你也应该为了其他目的而逃避其他数据;例如,应该转发发送回浏览器的数据,以防止流氓用户向其添加原始HTML或Javascript代码操纵你的网站。

PHP中有许多函数可以处理添加和删除转义字符以及数据过滤。如果您希望您的网站安全,您需要学习这些功能和技术。

[编辑]

看到你的编辑后:

首先,您需要转义查询中的所有字符串,而不仅仅是描述,因此请将转义添加到$_POST['logoimage1']等,因为如果其中任何一个包含引号,您将遇到相同的问题。

然而,描述字段中的转义看起来是正确的,所以我不知道它为什么会被截断。 mysql_real_escape_string()的手册页指出它避免了双引号和单引号,所以对你来说应该没问题。您可以通过print()完全转义的SQL字符串来测试它;这将显示是否有任何未转义的内容。

在黑暗中拍摄 - 您是否检查过数据库中描述字段的最大长度?这也可能导致字符串截断..但不太可能;我想如果你输入一个textarea,你就可以把它设置得足够长。

答案 4 :(得分:0)

  

根据@COL Sharpnel的Scouldings: - )

感谢Agauin让我自己模仿......有时是必要的

我回应了$ _POST ['description'],显示为

  

不要太担心   布局/设计/文字大小,我们经常会

当我使用

  

用htmlspecialchars(的stripslashes($ _ POST [ '描述']))

它给了我完整的字符串

  

“不要太担心   布局/设计/文字大小,我们会经常   “调味”(即粗体,斜体,   间隔)你的横幅更好   整体看。

     

<强>&GT;道德的道德:不要置信   关于SPAGHETTI代码