2010-08-05 8 views
14

이것은 어리석은 질문 일지 모르지만 나는 PHP에서 백 슬래시를 벗어날 필요가 있는지에 대해 혼란 스럽다.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 참조 할 경우 (\)를 탈출 할 필요가 없습니다,입니까? 마지막 예는 따옴표 (')를 포함하기 때문에

답변

25

single quoted strings에서 만 이스케이프 시퀀스 \\\'이 인식됩니다. \의 다른 어커런스는 일반 문자로 해석됩니다.

\M\U은 유효한 이스케이프 시퀀스가 ​​아니기 때문에 그대로 해석됩니다.

+0

그러나 백 슬래시 자체를 이스케이프 처리하는 것은 선택 사항 인 것 같습니다. 맞습니까? 그래서 나는''Hello \ world''와''Hello \\ world'' 둘 다 쓸 수 있습니다. 당신의 대답은 물론'\ w'가 유효한 escape sequence가 아니기 때문에 쓰여진 것처럼 출력된다는 것을 의미합니다. – caw

+0

@caw : 아니요. 여기서도 작동하지만, 백 슬래시를 이스케이프 처리하는 것이 "선택 사항"이기 때문에 _not_가 아니지만 '\ w'조합이 일치하지 않아 리터럴 형식으로 돌아 가기 때문에 _not_입니다. 그러나 이스케이프없이 단일 '\\'를 인쇄 해보십시오. 또는 하나의 백 슬래시로 끝나는 것. 구문 분석 오류가 발생합니다. –

+0

@Sz 그 이유는 단일 백 슬래시가 다음 작은 따옴표의 이스케이프 문자로 해석되기 때문입니다. 당신 말이 맞습니다. 백 슬래시를 이스케이프 처리하는 것은 일반적으로 사용자가 명시한 이유로 선택적입니다. 즉, 대부분의 경우 이스케이프 시퀀스가 ​​유효하지 않으므로 리터럴 백 슬래시로 인쇄됩니다. – caw

0

, 당신은 addslashes 기능과 같은 문자열을 탈출이 필요하거나 단순히 이런 식으로 전에 자신을 슬래시 추가 :

'Application\Model\\'User' 
1

를, 그것은 백 슬래시를 이스케이프 선택의 유일한 예외는 시퀀스).

정규 표현식을 쓸 때 일반적으로 사용되는데 백 슬래시가 포함되어 있기 때문입니다. preg_replace('/\w\b/', ' ', $str)/\\w\\b/보다 읽기 쉽습니다.

manual을 참조하십시오.

+2

매뉴얼 및 승인 된 답변에 명시된 바와 같이 백 슬래시를 이스케이프 처리해야합니다. –

+0

@GrasDouble 아니요, 그렇지 않습니다. 이 대답은 정확합니다. – caw

+2

실제로는 한 가지 경우를 제외하고는 이스케이프 할 필요가 없습니다. 백 슬래시가 마지막 문자 인 경우. ''foo \\ ''는 작동하지만''foo \''는 작동하지 않습니다. 비 탈출 백 슬래시는 구문 론적 설탕으로 간주되어야한다고 생각합니다. 일관성을 위해 항상 탈출을 원할 수도 있지만, 그것은 당신에게 달려 있습니다. –

0

필자는 문맥에 따라 다르다고 생각하지만, 파일 경로에서 사용하는 경우 백 슬래시를 이스케이프 처리하는 것이 좋습니다.

또 다른 좋은 아이디어는 내가 전에 다양한 응용 프로그램에서 수행 본 적이있는 상수에 디렉토리 분리를 할당하고, 따라서 그것을 사용하는 것입니다

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

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

당신이 공간과 입력을 저장하려면, 다른 사람들은 상수 이름으로 DS을 사용합니다.

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

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

이 당신이 * nix에서 스크립트 환경에 Windows 환경에서 이동하는 경우로, 응용 프로그램 휴대용 유지 할 수 있습니다 간단한 변경 슬래시 상수 디렉토리 분리.

+4

'DIRECTORY_SEPARATOR'은 미리 정의 된 PHP 상수이기 때문에 다시 정의 할 수 없습니다. –

관련 문제