在PHP中我需要逃避反斜杠吗?

时间:2010-08-05 14:26:36

标签: php string escaping

我认为这可能是一个愚蠢的问题,但我很困惑我是否需要在PHP中反斜杠。

echo 'Application\Models\User'; prints Application\Models\User
echo 'Application\\Models\\User'; same output
echo 'Application\Model\'User'; gives Application\Model'User

所以它是一个逃避角色,如果我想引用\,我不应该逃避它(Application\Models\User)吗?

6 个答案:

答案 0 :(得分:30)

single quoted strings中,只识别转义序列\\\'; \的任何其他事件都被解释为普通字符。

因为\M\U不是有效的转义序列,所以它们会被解释为。

答案 1 :(得分:2)

在单引号字符串中,可以选择转义反斜杠,唯一的例外是在单引号或反斜杠之前(因为\'\\是转义序列)。

这在编写正则表达式时很常见,因为它们往往包含反斜杠。阅读preg_replace('/\w\b/', ' ', $str)/\\w\\b/更容易。

请参阅manual

答案 2 :(得分:1)

由于您的上一个示例包含引号('),因此您需要使用addslashes函数转义此类字符串,或者只是在此之前自行添加斜杠:

'Application\Model\\'User'

答案 3 :(得分:0)

您可以在此处找到完整的说明: http://nl.php.net/manual/en/language.types.string.php

答案 4 :(得分:0)

我认为这取决于上下文,但如果在文件路径中使用它,则转义反斜杠是一个好主意。

另一个好主意是将目录分隔符分配给一个常量,我之前在各种应用程序中看到过,并将其用作:

<?php
define('DIRECTORY_SEPARATOR', '\\');

echo 'Application'.DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'User';
?>

如果您希望节省空间和打字,其他人则使用DS作为常量名称。

<?php
define('DS', '\\');

echo 'Application'.DS.'Models'.DS.'User';
?>

如果您从Windows环境移动到* nix环境,这可以使您的应用程序保持可移植性,因为您可以简单地将目录分隔符常量更改为正斜杠。

答案 5 :(得分:0)

如果要在HTML页面中使用它,则最好使用代码\来表示反斜杠,如下所示:

echo 'Application&#92;Models&#92;User';

它将打印:

Application \ Models \ User