2011-03-22 16 views
0

的解决方案可能是一个容易的,但我不明白,为什么它不工作:想不通为什么“ n”时不删除

我提交使用jQuery的表格插件-in,然后通过运行它:

str_replace(array("\r", "\n\t"), "", $_POST['mytext'])

在HTTP头看, “\ n” 未在任何地方添加。然而,当我再打印$ _ POST [“mytext的”]从PHP(只是用于测试目的),萤火显示“\ n”所有的地方:

<html>\n <head>\n  <title></title>\n </head>\n <body>\n  <h3>\n   We are..... 

有趣的是,如果我选择这个输出,手动将其分配给var,然后在其上运行str_replace,所有\ n个字符消失。为什么它不会处理$ _POST变量?

请帮忙。疯狂似乎是一个微不足道的任务。

P.S.我有一个的.htaccess重写规则,但怀疑它搅乱任何东西:

RewriteRule ^/update_text/? my.php?action=update_text [QSA] 

QSA需要从我的JS传输其他$ _GET数据。


问题“解决的种类”。我用$ _REQUEST替换了$ _POST,现在它全部都是漂亮的。仍然不明白为什么$ _POST会以这种方式行事。

+0

我不明白的问题。在PHP中,用\ n和一个制表符(\ t)替换\ r。然后在输出的文本中,您会看到\ n后跟一个制表符。这不正是你要求代码做的吗?如果您在标题中没有看到\ n(我假设您是指发送到服务器的数据),也许您在发送的数据中只有\ r个字符,并且没有\ n? – nitro2k01 2011-03-22 16:18:29

+0

哦,等等,我误读了代码... – nitro2k01 2011-03-22 16:21:20

+0

记得 - \ n对HTML没有任何意义。要在页面中正确显示,您希望'
'代替。 – 2011-03-22 16:21:21

回答

0

您是否尝试过使用PHP常量的行尾? PHP_EOL

+0

Yup,no go。试过preg_replace(“%\ – MarkL 2011-03-22 16:39:15

-1

我认为php会自动转义发布的数据 - 所以为了避免它使用stripslashes($ _ POST ['mytext'])。这种行为可以在php.ini设置中对魔术引号进行更改,但为防止注入攻击的安全措施,最好将其保留在那里。

+1

'magic_quotes'对于防止[sql]注入来说是很差的安全性,这就是为什么它从5.3.0(http://php.net/magic_quotes)中折旧的原因,是因为不同的物品需要以不同的方式转义,所有的'magic_quotes'都是逃避它们的'addslashes' afaik,它并不涵盖所有不同数据库的所有不同漏洞。并建议使用折旧设置。关闭'magic_quotes'并更好地使用数据库提供的适当工具或应用程序的需要来处理转义。 – 2011-03-22 16:35:42

+0

我尝试过,但作为结果我结束了很多“n”个字符。 – MarkL 2011-03-22 16:36:01

+0

我被告知!谢谢你清理那个。 – 2011-03-22 16:48:54

2

你不能代替“\ n”,你可能会运行到了“\ r \ n”个问题

// Order of replacement 
$str  = "Line 1\nLine 2\rLine 3\r\nLine 4\n"; 
$order = array("\r\n", "\n", "\r"); 
    str_replace($order, "", $str); 
+0

@MarkL当你回应str_replace的结果时,会发生什么?是否有新行? – mcgrailm 2011-03-22 16:42:37

+0

是的,我唯一的建议是将'str_replace'数据赋值为'echo'它。在上面的代码示例中不太清楚。 – 2011-03-22 17:16:14

+0

尝试过,但仍然没有去。 'echo str_replace(array(“\ r \ n”,“\ n”,“\ r”),“”,$ _POST ['text'])'显示\ n。即使我将它插入到MySQL中,换行符也会显示在那里。 – MarkL 2011-03-22 17:19:29