Text within a PHP Mail function...?
Asked by
Evan (
810)
August 6th, 2007
I'm using the PHP Mail() function, and i'm using a standard html form to have the info put in, and then defining each field as part of
$mail_body = "example: $example\n\nExample on line 2: $example2";
and so on.. the problem i'm having is that within the mult-line < textarea > field, where if a contraction is typed in (such as can't, or don't), then in the email it shows up as "can\'t" or "don\'t"
why is this, and how do i fix it? please please? :) :)
Observing members:
0
Composing members:
0
5 Answers
I believe the backslashes are being inserted by magic_quotes_gpc, which is on by default. You can check to see to see whether it's on or not by using the get_magic_quotes_gpc function. You can turn it off globally in the php.ini or use the stripslashes function like so:
$example = stripslashes($example);
$example2 = stripslashes($example2);
// Using "here document" syntax makes the code more readable
$mail_body = <<<BODY
example: $example
Example on line 2: $example2
BODY;
thanks!
i just used the stripslashes function, since it was a small bit of code, and that worked well enough, but that was perfect! thnx again,
evan
According to the PHP manual "here document" text:
[...]behaves just like a double-quoted string, without the double-quotes. [...]
So you would still need the \n .
Also, to be more host-independent, you could better use:
if(get_magic_quotes_gpc())
{
$example1 = stripslashes($example1);
$example2 = stripslashes($example2);
}
This way, if magic_quotes_gpc is turned off it won't remove slashes that are supposed to be there (which might present a security risk).
Vincentt, "here document" syntax does indeed behave like a double-quoted string, but since there are new lines inside the string, \n is not necessary. I also could have written it as a double-quoted string without the \n like so...
$mail_body = "example: $example
Example on line 2: $example2";
...but as I said in the comment, I find heredoc to be easier to read.
If you are going to be doing this more than once, you may want to create a function that looks like this...
function stripslashes_if_gpc_magic_quotes( $string ) {
if(get_magic_quotes_gpc()) {
return stripslashes($string);
} else {
return $string;
}
}
Answer this question
This question is in the General Section. Responses must be helpful and on-topic.