【问题标题】:Insert text into a textarea using javascript without javascript parsing the text使用 javascript 将文本插入 textarea 而不使用 javascript 解析文本
【发布时间】:2011-04-21 02:57:37
【问题描述】:
'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
+ SOME VARIABLE FULL OF TEXT
+ '</textarea>'

前面只是一个简单字符串的一部分,我正在使用它来更改 javascript 函数内部 div 的 innerHTML 属性。如果该变量包含一个字符串,该字符串包含 javascript 可解析数据(要解释的数据),例如加法符号或引号等,那么“某些变量 FULL OF TEXT”就是问题所在 - 脚本会中断。我该如何避免这种情况?顺便说一句,该变量对每个用户都是动态的,它由 php echo 语句填充,因此在后端插入到 javascript 中。我已经考虑过如何以另一种方式完成此任务,但没有人想到。数据来自数据库,我用 PHP 提取它,我需要将它插入到这个文本区域中,该文本区域是基于用户命令通过 innerHTML 动态创建并插入到页面中的。感谢您的帮助。

编辑:请求的上下文函数:

else if (theChange == 'signature') {
        document.getElementById('userPanelChangeBox').innerHTML = 
        '<form action="tinUser_processor.php" method="post">'
        +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />'
        +'Enter your new signature:<br /><br />'
        +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
        +'<?php echo $userInfo['signature']; ?>'+'</textarea><br /><br />'
        +'<input type="hidden" value="signature" name="typeChange" />'
        +'<input type="submit" value="Submit Change" name="submitter" /></form>';
        }

【问题讨论】:

  • 你能告诉我们包括php在内的上下文
  • 简而言之,我试图转义动态输入,以便解释器不会将 + 解释为 javascript 命令或将引号解释为命令等,以便我可以在即使用户可能已经输入了这些符号之一,等等。这可能有助于更好地解释它。
  • 当然 -
  • 它可以很好地提取数据,PHP 中没有问题,我只是想告诉 javascript 不要解释脚本的一部分中的任何编程,我只是想要它,完全,在 textarea 中,不要试图将任何内容解释为脚本。
  • 我想我看不到 javascript 将如何解析 textarea 的文本

标签: javascript php string parsing


【解决方案1】:

似乎您需要转义 HTML 和单引号。您可以使用 PHP 的内置 htmlentities 函数来执行此操作,如下所示:

<?php echo htmlentities($userInfo['signature'], ENT_QUOTES); ?>

【讨论】:

  • 我在考虑使用像逃逸这样的 javascript 函数,但后来意识到它不能逃逸 javascript 运算符等。然后我考虑使用 addlashes 并意识到它可能无法逃脱 javascript 可能想要解析的所有内容 - htmlentities 可能会工作,谢谢。
【解决方案2】:

您需要在服务器上将任何特殊字符转换为 HTML 实体,当它在客户端时为时已晚。例如:

"foo <= bar"

变成

&ldquo;foo &le; bar&rdquo;

然后在插入字符串的时候变成:

"&ldquo;foo &le; bar&rdquo;"

而不是

""foo <= bar""

这显然会弄乱客户端的脚本。您也可以使用 unicode 转义序列。

【讨论】:

  • 感谢您的意见,这就是我要找的。​​span>
【解决方案3】:

如果您出于其他原因需要在客户端完成此操作(已测试):

<textarea id=text></textarea>
<script type="text/javascript">
var signature = "<div>Not actually a div.</div>";
document.getElementById('text').value=signature;

所以,这样的事情会起作用(未经测试):

else if (theChange == 'signature') {
    document.getElementById('userPanelChangeBox').innerHTML = 
    '<form action="tinUser_processor.php" method="post">'
    +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />'
    +'Enter your new signature:<br /><br />'
    +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
    +'</textarea><br /><br />'
    +'<input type="hidden" value="signature" name="typeChange" />'
    +'<input type="submit" value="Submit Change" name="submitter" /></form>';
    document.getElementById('userPanelChangeBox').textChange.value='<?php echo $userInfo['signature']; ?>';
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2014-12-08
    • 2010-10-31
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多