2013-02-21 2 views
1

PHP mail(); 함수에 이상한 문제가 있습니다. 예상대로PHP - mail() - 작은 따옴표 대 큰 따옴표

$header = "MIME-Version: 1.0" . "\r\n"; 
$header .= "Content-type: text/html; charset=utf-8" . "\r\n"; 
$header .= "Content-Transfer-Encoding: quoted-printable" . "\r\n"; 
$header .= "Reply-To:" . $email . "\r\n"; 
$header .= "From: Kontaktformular <[email protected]>" . "\r\n"; 
mail("[email protected]", "Message from " . $name . " through your website!", $message, $header); 

모든처럼 사용하여 작동합니다. 메일이 전송되고 모든 것이 올바르게 인코딩되며 주제도 괜찮습니다.

하지만이 같은 작은 따옴표와 큰 따옴표를 변경할 때 :

$header = 'MIME-Version: 1.0' . '\r\n'; 
$header .= 'Content-type: text/html; charset=utf-8' . '\r\n'; 
$header .= 'Content-Transfer-Encoding: quoted-printable' . '\r\n'; 
$header .= 'Reply-To:' . $email . '\r\n'; 
$header .= 'From: Kontaktformular <[email protected]>' . '\r\n'; 
mail('[email protected]', 'Message from ' . $name . ' through your website!', $message, $header); 

이 메일은 여전히 ​​전송됩니다,하지만 설정 될 수없는. 대신,

[email protected]

이며, 특수 문자도 파괴된다. 거기서 무슨 일이 일어나고있는거야?

답변

4

작은 따옴표는 리터럴 문자열을, 어떤 변수/교체하지 확장 및 탈출 존중 다른 \'보다 및 \\ 시퀀스되지 않습니다 있습니다. 코드를 작성한 방법으로는 의 줄 바꿈을 "\r\n"으로 큰 따옴표로 묶어야하는 경우를 제외하고는 작은 따옴표를 그대로 둘 수 있습니다.

+0

\ '및 \\ 실제로 – leftclickben

+0

@leftclickben 어, 어떤군요. 그들이 모든 도피를 제외하고 그 일을 끝내면 더 나을 것입니다. 답변이 업데이트되었습니다. – Sammitch

4

특수 줄 바꿈 문자 ("\r\n")를 넣으려면 큰 따옴표가 필요합니다. 작은 따옴표를 사용하면 줄 바꿈으로 처리되지 않고 대신 리터럴 텍스트로 처리됩니다.

PHP 인터프리터는 재료를 큰 따옴표로 평가하지만 작은 따옴표로 평가하지는 않습니다. 이 때문에 변수를 평가할 때, 연결이 불가능할 때 또는 줄 바꿈과 같은 특수 문자와 같이 큰 따옴표 만 사용하는 것이 가장 좋습니다.

1

설명서를 읽어 보시기 바랍니다 :

http://php.net/manual/en/language.types.string.php

싱글, 리터럴 따옴표를 지정 백 슬래시를 탈출하기 위해

을 인용(). 에 리터럴 백 슬래시를 지정하려면 두 번 (\)을 사용합니다. 백 슬래시의 다른 모든 인스턴스는 리터럴 백 슬래시로 처리됩니다. 즉, \ r 또는 \ n과 같이 다른 이스케이프 시퀀스 (예 : \ r 또는 \ n)는 특별한 의미가 아닌 지정된대로 그대로 출력됩니다.

관련 문제