我正在尝试回显我的数据库中所有学生的电子邮件列表,但$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>, ";
}
答案 0 :(得分:2)
网络浏览器会考虑<
&amp; >
作为定义标记的开始和结束。您的代码生成<john@example.com>
,浏览器认为这是一个标记。您必须使用HTML实体:
echo "$first $last <$email>, ";
答案 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 <$email>, ";
或使用以下
echo htmlentities("$first $last <$email>, ");
PHP会自动转换< >