【问题标题】:Input field containing double quotes value包含双引号值的输入字段
【发布时间】:2011-01-01 12:52:08
【问题描述】:

在我的 PHP 项目中,我有一个包含特殊字符的值,例如“、”等(“5”英寸、“3.5”英寸等)。但它没有出现在文本字段中。我该如何显示这个?

是否可以在文本框中显示此值?

【问题讨论】:

    标签: php html


    【解决方案1】:

    我需要将htmlspecialcars() 应用于查询结果数组。我找到了a useful solution from here(见肖恩的评论)。

    // Create a cleaning function
    function _clean(&$value) {
      $value = htmlspecialchars($value);
      //$value = htmlspecialchars($value, ENT_QUOTES); // Alternative
    }
    
    // Fetch the data from DB somehow (sqlQ is a custom function)
    $q = "...";
    $r = $d->sqlQ($q);
    $row = mysqli_fetch_array($r, MYSQLI_ASSOC);
    
    //...call the function recursively (not always necessary) to the resultset row
    array_walk_recursive($row, '_clean');
    

    如果你只获取几个文本列,它会做很多不必要的工作,但至少你不需要将htmlspecialchars()函数多次写入HTML表单。

    【讨论】:

      【解决方案2】:

      我个人使用这个技巧:

      $s = str_replace("& amp ;", "&", (htmlentities(stripslashes($s), ENT_QUOTES, 'UTF-8')));
      

      【讨论】:

        【解决方案3】:

        我发现您是否在 JavaScript 中的变量(来自 Ajax/数据库)中使用双引号,并且您想将它放在一个字段中 - 如果您构建整个字段/表单 HTML 内容,然后将其交换为div 使用innerHTML,值中的双引号会导致问题。我正在这样做,但我也无法通过逃避来解决它。

        您应该使用字段构建 HTML 内容并先将其交换,然后执行 document.getElementById('myfieldid').value = thevalue;相反,它工作正常。

        【讨论】:

        • 对于 Javascript 解决方案,这很有效,让我摆脱了困境。没有人提到这个线程需要在 PHP 中。所以我拿走了你的-1。 :) 感谢您解决这个问题。否则我会花一整夜来修复一个错误。
        • 谢谢 :) 这是一个奇怪的问题,我无法相信转义不起作用。很高兴知道它有帮助,而且我不是唯一一个遇到这种问题的人。
        【解决方案4】:

        当使用字符集 UTF-8 时,我使用下面的代码来获得 Iñtërnâtiônàlizætiøn 和双(或单)引号:

        <input type="text" name="title" value="<?php echo htmlentities(stripslashes(utf8_decode($title))); ?>" />
        

        PS:这在有人提交表单后很有用,但在输入未验证时。

        【讨论】:

        • 我更喜欢使用stripcslashes() 来保留更改行。
        【解决方案5】:

        我想你的“文本框”是一个 HTML &lt;input&gt; 元素?

        如果是这样,您将使用以下方式显示它:

        echo '<input name="..." value="' . $yourValue . '" />';
        

        如果是这种情况,您需要使用 htmlspecialchars 转义包含在变量中的 HTML:

        echo '<input name="..." value="' . htmlspecialchars($yourValue) . '" />';
        

        请注意,您可能需要添加几个参数,尤其是指定您使用的编码。


        这样,考虑到$yourValue 已被初始化为:

        $yourValue = '5 " inches';
        

        您将从这个生成的 HTML 中获得:

        <input name="..." value="5 " inches" />
        

        到那个效果更好的那个:

        <input name="..." value="5 &quot; inches" />
        

        【讨论】:

        • 那么当您提交该输入字段时会发生什么?它会进入像“”这样的数据库吗?然后您必须将其转换到其他地方?如果您想在其中提交实际的双引号怎么办。
        • +1 表示更具描述性,提及编码,因为htmlspecialchars() 就足够了。
        【解决方案6】:

        对于 UTF-8,我选择了 htmlspecialchars($value, ENT_QUOTES, "UTF-8"),它成功了。

        stack source

        【讨论】:

          【解决方案7】:

          试试这个

           echo '<input name="..." value="' . htmlspecialchars(stripslashes($yourValue)) . '" />';
          

          或

          <input name="..." value="<?php echo htmlspecialchars(stripslashes($value)); ?>">
          

          祝你好运;)

          【讨论】:

            【解决方案8】:

            使用htmlentities:

            <input value="<?php echo htmlentities($value);?>">
            

            【讨论】:

            • 如果您想保存这些未编码在数据库中的值怎么办?在执行 SQL INSERT 之前,您必须每次申请 html_entity_decode(); 吗?听起来不太好
            • yes123,不,你没有。此编码将确保 HTML 文档中的值正确。网络浏览器会自动以正确、正常的格式发送。
            • 与stripcslashes()结合更好
            • Shivan,这里没有理由去掉任何斜线。您要做的是对 HTML 视图的字符串进行编码,您不需要进行任何其他过滤。
            • 如果您希望单引号和双引号都可以输入,请使用 ENT_QUOTES 标志htmlentities($value,ENT_QUOTES) 另外,我最近遇到了 UTF-8 的问题,所以根据您的需要,您可能想要传递 'UTF-8' 作为编码(第三个参数)。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-02
            • 2022-10-14
            • 2011-12-09
            • 1970-01-01
            • 2018-03-20
            • 1970-01-01
            • 2020-05-23
            相关资源
            最近更新 更多