【问题标题】:replacing characters with escape in a javascript string在 javascript 字符串中用转义符替换字符
【发布时间】:2012-05-17 23:10:44
【问题描述】:

我知道肯定有成千上万个这样的线程,但是互联网和堆栈溢出充斥着来自其他编程语言的结果,并且只是用空格替换字符等等......

所以...我的问题如下...

我有一个表格:<input type='text' id='my_input'>

然后我在 javascript(使用 jquery)中解析我的所有字段以创建我的 ajax 调用,就像这样

var my_value = $('#my_input').val();

然后我进行替换以获取换行符my_value = my_value.replace('\n', '<br>');

之后我使用 ajax 发布我的变量,如下所示:

data_to_post = 'my_field1=' + my_value1 + 'my_field2' + my_value2;

$.ajax({  
type: 'POST',  
url: '/write_to_db.php',  
data: data_to_post
});  

现在我网站上的很多人都在谈论编程,而这些内容开始搞砸我的网站,因为他们的帖子内容被解析为 php 或 html 格式 - 我打算替换所有可能搞砸代码的有问题的字符我的网站。

最有问题的表达式是 html 标记和 &=,因为它会干扰我将 post 变量放在一起的方式。

现在,因为这些字符是内容所必需的,所以我不能简单地将它们全部替换为单个字符。

有什么办法可以逃脱它们(最好在一行命令中)?

谢谢!

更新: 我的临时解决方案是这样的:

this_string = this_string.replace(/</g, '&#60;');
this_string = this_string.replace(/>/g, '&#62;');
this_string = this_string.replace(/\n/g, '<br>');
this_string = escape(this_string);

【问题讨论】:

    标签: php javascript jquery escaping


    【解决方案1】:

    试试javascript函数escape():http://www.w3schools.com/jsref/jsref_escape.asp

    data_to_post = 'my_field1=' + escape(my_value1) + 'my_field2' + escape(my_value2);
    

    编辑:

    要处理人们不允许发布的 HTML 字符,你可以 php 这个:

    $outputstring = "hi<br />bye!";
    echo htmlspecialchars($outputstring);
    

    有关其工作原理的信息:http://php.net/manual/en/function.htmlspecialchars.php

    【讨论】:

    • 这很好用 :) 现在我仍然可以处理 html 标签,你知道有什么解决方案吗?
    【解决方案2】:

    我会在表单元素本身上使用 $.serializeJSON() 来收集整个表单的所有值。然后我会通过 AJAX 调用将其发送到服务器端脚本。像解析允许代码和纯文本一样的复杂注释或文本字段之类的任务最好留给服务器端语言。

    【讨论】:

    • 我从来没有使用过,这是否意味着,我必须将我所有的 my_value 变量发送到脚本,然后将它们与转义字符一起返回?
    • 嗯,这是一个CMS,是吗?那么,您是否希望将此信息存储在某个数据库中以供其他用户检索?无论如何,您必须在某个时候将其发送到服务器。
    • 是的,对于我的公司来说,这是一个类似于 facebook 的社区。我将阅读有关 $.serializeJSON 的信息,到目前为止谢谢
    • 这里的其他人建议要求您的用户将代码(HTML 或其他)包装在特殊标记中( 可能有效)。这通常是我用来实现您的目标的方法。然后,您可以在服务器端阅读提交的文本,并以不同的方式解析代码标签中的文本与外部的普通纯文本。
    【解决方案3】:

    怎么样:

    my_value = my_value.replace(/\n|\.|\~/g, '<br>');
    

    把你的字符替换成 | (OR) 分隔符并在末尾添加 /g 标志

    【讨论】:

    • 这并不能真正解决我的问题,因为现在:my_value = "my ".phpinfo()." content" 返回 "my "
      phpinfo()
      "content"
    • 我认为这就是你想要的。我应该更仔细地阅读您的要求。
    【解决方案4】:

    虽然您的意图对我来说并不完全清楚,但您可以保留程序员的内容,并通过将表达式包装在标签中来显示回车/换行。

    另一种可能性是使用 CSS 来设置外观样式。看看这个帖子的答案:How can I replace certain carriage return line feed followed by a dash with a <br/>?

    【讨论】:

    • 这对我没有帮助,问题是例如当人们开始输入 &= 之类的内容时,因为我使用 ajax 将内容发布到 php,就像在这个变量中一样:data_to_post = 'my_value1=' + my_value1 + '&my_value2=' + my_value2;
    【解决方案5】:

    听起来您只是想对 HTML 字符进行编码以保留 HTML 字符,因此如果是这种情况,以下将正确编码文本:

    var textVal = $('#my_input').val();
    var encoded = $('<div/>').text(textVal).html();  
    

    这会创建一个内存中的 div 来帮助进行编码。要解码,您只需将 div 调用更改为:

      var unencoded = $('<div/>').html(textVal).text()
    

    【讨论】:

    • 这不是我想要做的。我正在将内容写入数据库,然后使用 mysql_fetch_array() 在 php 中读取该数据库
    • 那么根据您的原始问题,我并不完全清楚您要做什么。您只是在寻找换行符吗?如果不是,您认为哪些文本集有问题?
    • 我希望转义所有特殊字符并用
      替换换行符
    【解决方案6】:

    您是否考虑过像下面的示例一样让 PHP 为您处理这个问题..?

    nl2br(htmlspecialchars($str,ENT_QUOTES,'UTF-8'));
    

    【讨论】:

      【解决方案7】:
      $.ajax({  
      type: 'POST',  
      url: '/write_to_db.php',  
      data: {
         'my_field1': my_value1,
         'my_field2': my_value2
      }
      }); 
      

      在数据中传递一个对象而不是一个字符串,jquery 为你做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 2020-07-11
        • 2012-02-17
        • 1970-01-01
        • 2016-03-10
        • 2015-01-17
        相关资源
        最近更新 更多