PHP'addslashes'表现不尽如人意
这一直是疯狂,但我似乎无法找到答案。我们运行一个技术知识库,有时包括用于映射到网络驱动器的Windows samba路径。
例如:
\servernamesharename
当我们包含具有两个反斜杠的路径时,它们在运行'addslashes'时不会被正确转义。我的预期结果是“\\servername\sharename
”,但它返回“\servername\sharename
”。显然,稍后运行'stripslashes'时,双反斜杠前缀只是一个斜杠。我也试过使用str_replace("\", "\", $variable);
但是当我期待"\\servername\sharename"
时它会返回"\servername\sharename"
。
因此,对于addslashes,它会忽略第一组双反斜杠,并且使用str_replace将双反斜杠更改为单个编码反斜杠。
我们需要运行addslashes和stripslashes来插入数据库;使用pg_escape_string在我们的特定情况下不起作用。
这是在Apache上的PHP 5.3.1上运行的。
编辑:示例代码
$variable = 'In the box labeled Folder type: \servernamesharename';
echo addslashes($variable);
返回:In the box labeled Folder type: \servername\sharename
编辑:示例代码#2
$variable = 'In the box labeled Folder type: \servernamesharename';
echo str_replace('\', '\', $variable);
返回:In the box labeled Folder type: \servername\sharename
我还想声明使用单引号或双引号不会给我不同的结果(正如您所期望的那样)。使用其中一个或两个给我相同的结果。
有没有人对我可以做什么有任何建议?
没有找到相关结果
已邀请:
4 个回复
佬棠
还有这个
PHP使用单引号转义双斜杠,因为它用于转义单引号。
貉骂
这输出:
虽然这可能不是一个彻头彻尾的答案,但它确实有效,并说明了这两个结构如何处理转义字符的区别。如果使用,那!可以使用另一个正则表达式轻松替换为所需的字符。
量华
的问题,这是将字符串赋值给变量的问题。
返回:在标有文件夹类型: servername sharename的框中 这是因为双反斜杠被解释为转义反斜杠。请改用此分配。
杭难插
会以这种方式正确地逃避POST的数据。 做了更多研究,我确定我遇到的问题是PostgreSQL如何接受转义数据。在将数据插入PostgreSQL数据库后,它将删除实际将数据放入表中时给出的任何转义字符。因此,在将数据拉回时,不需要
删除转义字符。 这个问题源于从PHP 4.1(启用Magic Quotes)到PHP 5.3的代码迁移(不推荐使用Magic Quotes)。在现有系统(PHP4)中,我认为我们并不知道Magic Quotes已经开启。因此,所有POST数据都已被转义,然后我们在插入之前用
再次转发该数据。当它被插入到PostgreSQL中时,它会剥离一组斜线并离开另一个斜线,因此需要我们在出路时
。现在,随着Magic Quotes的关闭,我们以
逃脱,但在出路时不需要使用
。 组织和确定问题的确切位置非常困难,所以我知道这个答案与我原来的问题有点不同。不过,我确实感谢所有贡献的人。让其他人听到他们的想法总是有助于让你思考你自己可能没有的途径。