\ n n在输入标记中显示为\ n - 在用户输入上使用htmlspecialchars()

时间:2014-01-12 23:02:30

标签: php input heredoc htmlspecialchars

我有一个简单的问题 - 用户填写表单,当表单POST为POST时,我将数据存储到HEREDOC并将其保存到可以在浏览器中打开和查看的文件中。

问题是我无法弄清楚如何在html'input'标签内100%忠实地重新显示用户输入的文本输入。

以下是我的麻烦的用户输入的示例:

 oh' mesquid"ly b\\n;"'

当我打开文件重新显示该位数据时,由于引用而失败:

    <input type="text" id="theSubject" value='oh' mesquid\"ly b\\n;\"''/>

我在此输入字段中看到的只有

所以我尝试了 htmlspecialchars() - 这让我几乎 - 但我在示例文本中的'n'之前丢失了2个反斜杠之一字符串,输出看起来像 哦'mesquid'ly b \ n;“'

这是代码 - 'myTitle'在这里填充了上面的哦'mesquid“ly b \ n;”'由我,用户,我将其键入表单然后POST' d形式(当我在这里预览这个问题时,我注意到StackOverflow帖子文本输入有同样的问题 - 尽管我在本段第一行输入了两个“\”反斜杠,因为我查看了我的在提交之前在这里提出问题我注意到其中一个反斜杠丢失了,对不起,我无法控制):

 <?php

   $title = $_POST['myTitle'];
   $theEscapedTitle = htmlspecialchars($title, ENT_QUOTES);

   $html = <<<HEREDOC

   <?php
      \$title = '$theEscapedTitle';   
   ?>

   <!DOCTYPE html>
   <html>
   <body>
      <input type="text" id="theSubject"value='<?php echo $title ?>'/>
   </body>
   </html>  

   HEREDOC;

   file_put_contents("myFile.php", $html);

 ?>   

当我打开“myFile.php”时,上面的'input'标签如下所示:

    <input type="text" id="theSubject" value='oh&#039; mesquid&quot;ly b\n;&quot;&#039;'/>

为什么我会丢失输入文本字符串中的2个反斜杠之一 哦'mesquid'ly b \ n;“'我应该怎样做才能忠实地重现文本字符串?

修改

我在下面找到了一个可行的解决方案并且不得不稍微调整一下,这是我的问题的解决方案:

 function reproduceBackslashesFaithfully($string) 
 {
      $string = str_replace('\\','\\\\',$string);
      $string = htmlspecialchars($string, ENT_QUOTES);
      return $string;
 }

当我传递此函数时,我的用户输入包含加倍的反斜杠,现在我在上面的代码中的输入标记中看到那些双反斜杠忠实再现。我正在研究为什么在下面的Anonymous的答案中给出的函数参数的原始'通过引用传递'对我来说不起作用,因为PHP文档表明传递引用函数参数应该在我的PHP版本5.3中工作0.5。

1 个答案:

答案 0 :(得分:0)

这应该使反斜杠加倍并修复撇号:

<?php
    function clean(&$string) {
        $string = str_replace('\\','\\\\',$string);
        $string = htmlspecialchars($string, ENT_QUOTES);
    }
?>

您可以使用clean($var)

轻松实现它