你怎么能在提交表格后逃避报价?

时间:2013-11-25 17:18:44

标签: php html

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

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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

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

因此,记住这一点,我通常喜欢在PHP中回显HTML元素时使用单引号。我只是使用长形式的概念,我非常清楚我在哪里投入动态价值观。这也可以避免担心转义引号。

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

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

请注意,即使使用StackOverflow的基本语法,也要强调查看静态字符串的位置以及动态值的位置是多么清晰。将其与原始帖子中的语法突出显示进行比较。你可以看到你对双引号和单引号的不一致使用是如何产生问题的。

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