我试图为我的数据库中的所有学生回显电子邮件列表,但$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 <$email>, ";
它被解释为一个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 <$email>, ";
或使用后面的
echo htmlentities("$first $last <$email>, ");
PHP自动转换< >