如何使用PHP从输入框中去除引号?

6

我有这个:

<input name="title" type="text" class="inputMedium" value="' . $inputData['title'] . '" />

我希望能够从用户输入中删除引号,这样如果有人输入类似于:"这是我的标题",它就不会破坏我的代码。

我尝试了这个方法,但它没有起作用:

$inputData['title'] = str_replace('"', '', $_POST['title']);

Jeff Atwood: Stack Overflow - Building Social Software for the Anti Social 的第13分25秒处被提及。(这也表明该演讲可能比2020年的出版日期早大约10年。) - Peter Mortensen
3个回答

8
如果我理解问题正确的话,你想从$inputData['title']中删除",以便你的HTML代码不会被弄乱?
如果是这样,那么“正确”的解决方案不是删除双引号,而是在实际输出之前对它们进行转义
例如:
echo '<input name="title" type="text" class="inputMedium" value="'
   . htmlspecialchars($inputData['title'])
   . '" />';

注意:根据您的情况(特别是关于您可能使用的编码/字符集方面),您可能需要向htmlspecialchars传递一些附加参数。通常来说,无论您使用什么样的输出格式,都应该始终转义您发送的数据作为输出。例如:
- 如果您正在生成一些XML或HTML,则应使用htmlspecialchars - 如果您正在生成一些SQL,则应使用mysql_real_escape_string或等效方法,这取决于您正在使用的数据库类型。

刚刚注意到:在输入HTML时可以使用单引号而不是双引号(例如<input value='hello'/>)。但由于htmlspecialchars会保留单引号,这可能会造成安全漏洞? - Sam

2

在这种情况下,用户输入应该经过 htmlspecialchars() 处理后再使用。


-1

我强烈建议您在任何地方显示用户生成的内容之前使用htmlentities($string, ENT_QUOTES)...


1
htmlentities 对我来说没有起作用,只有 htmlspecialchars() 起了作用。问题是由于某种原因,htmlentities 无法正确处理重音符号。 - Guillermo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接