在javascript字符串中用escape替换字符

时间:2012-05-17 23:10:45

标签: php javascript jquery escaping

我知道必须有成千上万的这样的线程,但互联网和堆栈溢出充斥着其他编程语言的结果,只需用空白替换字符等等......

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

我的表单包含:<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标签和&amp; =因为它干扰了我将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);

7 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分:0)

怎么样:

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

将你的角色替换为| (OR)分隔符并在末尾有/ g标志

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

您是否考虑过让PHP在以下示例中处理这个问题。?

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

答案 6 :(得分:0)

$.ajax({  
type: 'POST',  
url: '/write_to_db.php',  
data: {
   'my_field1': my_value1,
   'my_field2': my_value2
}
}); 

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