2014-10-16 2 views
-1

동적 인 body-field가있는 메일 스크립트를 사용하기 때문에 관리자는 자신의 BODY를 만들 수 있습니다. 그러나 몸에는 몇 가지 변수가 필요합니다. 관리자 사용자의 입력의

예 :

친애 [이름] [기업]

이 텍스트를 등록 감사에서이 테이블에 삽입됩니다. 그러나 이제 자동 입력 메일을 만들기 위해이 입력을 사용하고 싶습니다. 그래서 $ 본문의 내용이 있어야한다 : $ 회사에서

친애 $ 이름이 내 코드입니다

를 등록 감사 :

$inserted_text = addslashes($_POST['inserted_text']); 
    $patterns = array(); 
          $patterns[0] = '/[name]/'; 
          $patterns[1] = '/[company]/'; 

          $replacements = array(); 
          $replacements[1] = '$name'; 
          $replacements[0] = '$company'; 
          $inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 


$body = <html><head>...</head><body> $inserted_text_dynamic </body> 

mail($to, $subject, $body, $headers); 

그러나 출력이 잘못? 내 $ body에 $ name과 같은 콘텐츠를 어떻게 관리 할 수 ​​있습니까?

+2

정규 표현식'/ [name]// [company] /'는 예상 한대로하지 않을 수도 있습니다. 대괄호를 이스케이프해야합니다. 그렇지 않으면 regexp 문자 클래스입니다. '/ \ [name \] /' –

+0

패턴이 예상 한 것과 일치하지 않습니다. 당신은 더 나은 결과를 인용 할 것입니다. 또한 색인이 혼합되어 있습니다. 이런 경우 템플릿 언어를 사용하는 것이 좋습니다. –

+3

여기서'preg_replace()'를 사용할 필요가 없습니다 - 평범한 오래된 ['str_replace()'] (http://us2.php.net/manual/en/function.str-replace.php) 지원 '[name]'과 같은 정적 대체물에 더 적절하게 사용됩니다. –

답변

0

이 작동하지 않습니다

$body = "<html><head>...</head><body> " . $inserted_text_dynamic . " </body>"; 
:

$replacements[1] = '$name'; 
$replacements[0] = '$company'; 

사용 따옴표 :

$replacements[1] = "$name"; 
$replacements[0] = "$company"; 

또는 따옴표 :이

$replacements[1] = $name; 
$replacements[0] = $company; 

사용

대신이 같은

$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 

에서

$body = <html><head>...</head><body> $inserted_text_dynamic </body> 

그리고 제거 firts 브래킷 : 여기 놀이에 몇 가지가 있습니다

$inserted_text_dynamic = preg_replace($patterns, $replacements, $inserted_text); 
+0

감사합니다. [와]만이 통역사로 인식되지 않습니다. 이제 NAME이 포함 된 모든 단어가 변경되어 입력 [name]이 [$ name] (으)로 변환됩니다. – akkie

0

많은 당신이 따옴표에

echo "Dear $name from $company, thanks for registering"; 

로 사용할 수 있습니다 그것을 할 수있는 방법 변수가 자동으로이 값 주어진 또는 작은 따옴표를 사용하려면 다음이 시도 ca를 표시 있습니다.

echo 'Dear '.$name. ' from '.$company. ', thanks for registering'; 
3
$replacements[1] = '$name'; 
$replacements[0] = '$company'; 

이것은 당신이하려는 방식으로 작동하지 않습니다는 작은 따옴표는 변수의 확장을 억제하기 때문이다.

사용 따옴표 :

$replacements[1] = "$name"; 
$replacements[0] = "$company"; 

또는 따옴표 :

$replacements[1] = $name; 
$replacements[0] = $company; 

@MichaelBerkowski 또한 올바르게 정규 표현식 패턴에 대괄호를 사용하지만, 대괄호가 메타 것을 지적 정규 표현식에서, 그래서 당신은 그들을 탈출해야합니다. 또는 다른 문자를 선택하여 전자 메일 서식 파일에서 자리 표시자를 구분할 수 있습니다. 또는 정규식 대신 고정 문자열 교체를 수행하는 함수를 사용하십시오.

0

- 구문 오류와 부적절한 정규식. Here은 완전한 솔루션 예입니다.

$_POST['inserted_text'] = 'Dear [name] from [company], thanks for registering'; 
$name = 'foo'; 
$company = 'bar'; 
$inserted_text = addslashes($_POST['inserted_text']); 
$patterns = array(); 
$patterns[0] = '/\[name\]/'; // you have to escape square brackets in regex because they are special to regex 
$patterns[1] = '/\[company\]/'; 

$replacements = array(); 
$replacements[1] = $name; // removed quotes 
$replacements[0] = $company; // removed quotes 
$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 

$body = '<body>' . $inserted_text_dynamic . '</body>'; 
echo $body; 
관련 문제