0

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

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

我有一个表格:<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);
4

7 回答 7

1

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

于 2012-05-17T23:23:40.850 回答
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

于 2012-05-17T23:51:50.707 回答
0

怎么样:

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

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

于 2012-05-17T23:20:29.977 回答
0

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

另一种可能性是使用 CSS 来设置外观样式。看看这篇文章的答案:如何用 <br/> 替换某些回车换行符,后跟破折号?

于 2012-05-17T23:24:44.517 回答
0

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

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

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

  var unencoded = $('<div/>').html(textVal).text()
于 2012-05-17T23:30:43.850 回答
0

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

nl2br(htmlspecialchars($str,ENT_QUOTES,'UTF-8'));
于 2012-05-17T23:53:11.640 回答
0
$.ajax({  
type: 'POST',  
url: '/write_to_db.php',  
data: {
   'my_field1': my_value1,
   'my_field2': my_value2
}
}); 

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

于 2012-05-18T03:24:00.513 回答