PHP变量在<中不回显;祝辞


PHP variable not echoing if wrapped in < >

我试图为我的数据库中的所有学生回显电子邮件列表,但$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>, ";
}

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

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

它被解释为一个HTML标签,是的。最安全的方法(对于电子邮件和名称)是在显示字符串之前使用htmlspecialchars()对字符串进行编码:

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

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

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

或使用后面的

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

PHP自动转换< >