php - HTML 选项:显示值而不是实际文本
问题描述
所以我在这里有些困惑。
我的代码是:
<select name="email" id="email_template" style="width:200px;">
<? foreach($order_email as $omail) { ?>
<option value="<?php echo $omail->text; ?>"> <?php echo $omail->headline; ?></option>
<? } ?>
</select>
所以我的问题是,该选项宁愿显示值($omail->text
)而不是文本($omail->headline
)
当我将值设为空时,它会显示文本。但是,当我在值中输入较小的值时,它也会显示。
该值是一大块 HTML 文本(格式化),大约 300 行。
所以我想它宁愿显示更大的,还是我错了?
解决方案
问题是您的值包含 html;如果您将“原样”输出到页面(就像您在此处所做的那样),那么浏览器将在您的值内看到关闭符号,认为您打算关闭标签,然后将之后的所有内容视为包含元素。
本质上,您正在生成如下输出:
<option value="<div>my value</div>" />My expected shown value</option>
但是因为值里面的 div 包含 > 符号,所以你的 html 是无效的。您所看到的是浏览器试图呈现您的页面并失败。但真正的问题是你试图用作价值的东西。
现在您可以使用一些 html 转义来正确地将 html 放入 value 属性中,这将使用 php 的html_entities
函数并产生如下内容:
<option value=">div<my value>/div<" />My expected shown value</option>
但实际上,处理此问题的正确方法是不要将大量 html 放入一个值中。那只是自找麻烦。由于用户可以自由地操作其中的内容,并且您的系统接受该值是 html,因此您可能会将系统打开到一些与安全相关的问题。
此外,通过发送隐藏在页面内的数百行 html,然后要求浏览器将它们发回,您给服务器和浏览器带来了额外的压力。
只需发送某种标识符并将 html 隐藏在您的服务器上的某个地方。这对每个人来说都更安全。
推荐阅读
- huawei-mobile-services - 华为 P30 Pro 上的系统日志
- python - 在 python 中读取 .dat 文件(Agilent 4294A 精密阻抗分析仪)
- android - 使用 Android Intent (Java) 将视频分享到 WhatsApp 和其他应用程序
- winforms - 如何使用 WebView2 控件动态更改 .NET Framework 4.8 C# WinForm 桌面应用程序的不透明度
- java - Java 包中“导入”的范围
- reactjs - 类型“HTMLIonListElement”上不存在属性“显示”
- java - 当元素是整数列表时,Java Sets 可以在不考虑顺序的情况下测试重复元素吗?
- python - 关于 scipy.optimize.linprog 的一些问题
- javascript - 用 JavaScript 替换正则表达式 - 为样式表中的每个 CSS 选择器添加一个父类
- arrays - 如何在 MongoDB Compass 中将单个 ObjectId 转换为 ObjectIds 数组