PHP变量如果包含在<中则不回显>

时间:2014-05-07 15:48:13

标签: php

我正在尝试回显我的数据库中所有学生的电子邮件列表,但$email变量没有回显,除非我删除< >从下面的代码。它是否试图将$email视为HTML或其他内容?我该如何正确地做到这一点?

$students = $users->student_list($item);

foreach ($students as $student) {
     $email     = $student['payer_email'];
     $first     = $student['first_name'];
     $last  = $student['last_name'];
     echo "$first $last  <$email>, ";
}

3 个答案:

答案 0 :(得分:2)

网络浏览器会考虑<&amp; >作为定义标记的开始和结束。您的代码生成<john@example.com>,浏览器认为这是一个标记。您必须使用HTML实体:

echo "$first $last  &lt;$email&gt;, ";

答案 1 :(得分:2)

它被解释为HTML标记,是的。您最安全的赌注(对于电子邮件和姓名)是在显示字符串之前使用htmlspecialchars()对字符串进行编码:

$email     = htmlspecialchars("<" . $student['payer_email'] . ">");
$first     = htmlspecialchars($student['first_name']);
$last      = htmlspecialchars($student['last_name']);
echo "$first $last  $email, ";

答案 2 :(得分:1)

echo "$first $last <$email>, ";可能是echos <mike@site.com>哪个浏览器认为是标记并尝试解析它(您可以查看要验证的页面源)。你应该使用以下来避免这个问题

echo "$first $last  &lt;$email&gt;, ";

或使用以下

echo htmlentities("$first $last  <$email>, ");

PHP会自动转换< >