在'input type =“text”'值中使用双引号不起作用,字符串在双引号处停止!

时间:2009-11-20 16:56:01

标签: php javascript html

如何让用户在文本字段中使用'''(双引号)......

每当我在字段中使用双引号(值)时,在我的PHP文件中接收变量时:

   $text=mysql_real_escape_string($_POST['subject']);

然后回显它,我得到一个正确转义的字符串,但字符串在双引号之前完全停止!

我不希望它因为双引号而停止!

Javascript用于验证文本字段,因此它不是空的,也许我应该在验证时使用javascript做更多的事情,并更改值,这样php可以获得正确的值,包括双引号?

由于

更新

CODE:

   $headline= mysql_real_escape_string($_POST['headline']);
   echo htmlentities($headline);

我试过合并上面两个,只会给出相同的结果。 注意:我还试过将ENT_QUOTES添加到htmlentities函数中......

输入的无格式字符串:

   + , . ; : - _ space & % ! ? = # * ½ @ / \ [ ]< > " ' hej hej
回声时

会输出:

   + , . ; : - _ space & % ! ? = # * ½ @ / \\ [ ]< > 

4 个答案:

答案 0 :(得分:20)

您必须使用htmlspecialchars($str, ENT_QUOTES)htmlentities($str, ENT_QUOTES)将引号转换为HTML实体&quot;。这些函数还会处理应该编码的其他字符。

mysql_real_escape_string()仅用于在数据库查询中转义单引号,以便您可以将带有单引号的字符串正确输入到数据库中(并避免SQL注入)。

编辑:添加参数。感谢micahwittman

答案 1 :(得分:3)

当您将其输出到input时它无法正常工作的原因是因为value在引号处被截断。您需要在输出中使用htmlspecialchars()

答案 2 :(得分:2)

你混淆了两件事:mysql_real_escape_string用于准备存储在mysql数据库中的字符串。 htmlentities用于准备字符串以在浏览器中回显。两者都很重要,但是在同一个字符串上一个接一个地调用是不可能的。做类似以下的事情:

// Copy string after escaping for mysql into $db_headline
$db_headline= mysql_real_escape_string($_POST['headline']);

// Copy string after escaping for page display into $html_headline
$html_headline = htmlentities($_POST['headline']);

// Store the headline in the database

...

?>
<input type="text" name="headline" value="<?php echo $html_headline ?>" />

...

答案 3 :(得分:1)

它不是JS修改输入字符串的工作,服务器应该确保它可以接受它所获得的内容。

在将它传递给mysql转义函数之前,您可以使用其他值(Assci符号或HTML &quot;等转义双引号吗?