【问题标题】:Use of double quotes in a 'input type="text"' value wont work, string stops at double-quote !在 'input type="text"' 值中使用双引号不起作用,字符串在双引号处停止!
【发布时间】:2009-11-20 16:56:00
【问题描述】:

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

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

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

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

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

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

谢谢

更新

代码:

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

我已经尝试合并以上两个,只会得到相同的结果。 注意:我还尝试将ENT_QUOTES 添加到 htmlentities 函数中...

输入的未格式化字符串:

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

在回显时会输出这个:

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

【问题讨论】:

  • 请不要为此使用 JavaScript。它不会做任何你不应该在服务器端做的事情。

标签: php javascript html


【解决方案1】:

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

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

编辑:添加参数。感谢 micahwittman

【讨论】:

  • 它不会显示双引号,它只会显示反斜杠...阅读我的更新 plz
  • 您需要为 htmlentities 使用可选的第二个参数,如下所示: echo htmlentities($headline, ENT_QUOTES);它还将对双引号和单引号进行编码(请参阅除 ENT_QUOTES 之外的其他特殊常量 php.net/manual/en/function.htmlentities.php )。此外,您不应该只使用 sql_real_escape_string() 来准备将字符串存储在 mysql 数据库中 - 这就是 \ 变成 \\ 的原因。
【解决方案2】:

将其输出到input 时它不起作用的原因是value 在引用处被截断。您需要在输出中使用htmlspecialchars()

【讨论】:

    【解决方案3】:

    您混淆了两件事: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 ?>" />
    
    ...
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 2014-09-20
        • 2014-09-18
        • 1970-01-01
        相关资源
        最近更新 更多