【问题标题】:How can you escape quotes in form post submit?如何在表单提交后转义引号?
【发布时间】:2013-11-25 17:18:44
【问题描述】:

对于我的表单提交,只要有单引号或双引号,引号之后的所有文本都会在正在发送的 $_POST['p#'] 中被截断。我尝试了 htmlspecialchars、用 $#039 替换字符串和添加斜杠,但 $_POST 数组中的字符串仍然被截断。这是代码的相关部分,当 $ques 中有一个带有单引号的字符串时,就会出现问题。

        "<form action="some.php" method="post"><input type='checkbox' name='p".$numberOfProgrammingQuestion."' value='".$ques."'>".$ques."<br><br>";

【问题讨论】:

  • 它只是在这里猜测,而没有看到处理它的 php 代码。可以发一下吗?

标签: php html


【解决方案1】:

基于以下内容应该可以工作....

"<form action="some.php" method="post"><input type='checkbox' name='p".$numberOfProgrammingQuestion."' value='".htmlspecialchars($ques, ENT_QUOTES)."'>".htmlspecialchars($ques, ENT_QUOTES)."<br><br>";

注意 html 特殊字符标志 ENT_QUOTES。它的文档显示......

int
$flags
[optional]
A bitmask of one or more of the following flags, which specify how to handle quotes, invalid code unit sequences and the used document type. The default is ENT_COMPAT | ENT_HTML401.
Available flags constants
Constant Name
Description
ENT_COMPAT
Will convert double-quotes and leave single-quotes alone.
ENT_QUOTES
Will convert both double and single quotes.
ENT_NOQUOTES
Will leave both double and single quotes unconverted.
ENT_IGNORE
Silently discard invalid code unit sequences instead of returning an empty string. Using this flag is discouraged as it may have security implications.
ENT_SUBSTITUTE
Replace invalid code unit sequences with a Unicode Replacement Character U+FFFD (UTF-8) or &#38;#FFFD; (otherwise) instead of returning an empty string.
ENT_DISALLOWED
Replace invalid code points for the given document type with a Unicode Replacement Character U+FFFD (UTF-8) or &#38;#FFFD; (otherwise) instead of leaving them as is. This may be useful, for instance, to ensure the well-formedness of XML documents with embedded external content.
ENT_HTML401
Handle code as HTML 4.01.
ENT_XML1
Handle code as XML 1.
ENT_XHTML
Handle code as XHTML.
ENT_HTML5
Handle code as HTML 5.

【讨论】:

  • 我不认为这里的问题实际上与字符编码有关,而是 OP 构造输出字符串的糟糕方式导致了他试图预置的数据填充到要破坏的输入元素中。
  • 我之前使用过 htmlspecialchars($ques) 并忽略了可以使用更多参数使其更好地工作。现在可以完美运行了,谢谢 Will!
  • 我应该只措辞或显示输入的代码行,以便更多地关注我遇到的实际问题,因为代码一定让人们误解了问题出在哪里,对不起 Mike。跨度>
【解决方案2】:

如果你以一致的方式使用双引号和单引号,你的生活会好得多。通常,您应该始终在 HTML 元素属性值周围使用双引号。这几乎是一个行业标准。

记住这一点,我通常喜欢在 PHP 中回显 HTML 元素时使用单引号。而且我只是使用长形式的连接,很清楚我在哪里输入动态值。这也无需担心转义引号。

我的建议是修改你的代码如下:

echo '<form action="some.php" method="post"><input type="checkbox" name="p' . $numberOfProgrammingQuestion . '" value="' . $ques . '">' . $ques . '<br><br>';

请注意,即使使用 StackOverflow 的基本语法,也能清楚地看到静态字符串在哪里以及动态值在哪里。将其与原始帖子中突出显示的语法进行比较。您可以看到双引号和单引号的不一致使用是如何产生问题的。

因此,正如您所了解的,我的建议是在具有良好语法突出显示功能的编辑器中工作。这将帮助您解决其中的一些问题。

【讨论】:

  • 我的问题不是那个。我只是复制并粘贴了上面显示的错误代码。问题是 $ques 中包含的字符串有时会带有单引号,当通过 POST 提交表单时,它会切断引号之后的所有内容。接收 POST 的 php 接收每个 UP 直到第一个单引号(不包括)。
  • @Garvin 是的,这是因为你在你的值周围加上了使用过的单引号,比如value='XXXXX' 这样如果你的值本身有一个',你会得到value='XXX'XXX',而且只有第一部分将被捕获​​。现在,在这种情况下,您当然需要对双引号进行编码。
猜你喜欢
  • 2014-02-15
  • 2017-01-08
  • 2011-08-28
  • 2023-04-02
  • 2011-09-10
相关资源
最近更新 更多