如何让用户在文本字段中使用'''(双引号)......
每当我在字段中使用双引号(值)时,在我的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 & % ! ? = # * ½ @ / \\ [ ]< >
答案 0 :(得分:20)
您必须使用htmlspecialchars($str, ENT_QUOTES)
或htmlentities($str, ENT_QUOTES)
将引号转换为HTML实体"
。这些函数还会处理应该编码的其他字符。
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 "
等转义双引号吗?