首页 > 解决方案 > 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 行。

所以我想它宁愿显示更大的,还是我错了?

标签: phphtml

解决方案


问题是您的值包含 html;如果您将“原样”输出到页面(就像您在此处所做的那样),那么浏览器将在您的值内看到关闭符号,认为您打算关闭标签,然后将之后的所有内容视为包含元素。

本质上,您正在生成如下输出:

<option value="<div>my value</div>" />My expected shown value</option>

但是因为值里面的 div 包含 > 符号,所以你的 html 是无效的。您所看到的是浏览器试图呈现您的页面并失败。但真正的问题是你试图用作价值的东西。

现在您可以使用一些 html 转义来正确地将 html 放入 value 属性中,这将使用 php 的html_entities函数并产生如下内容:

<option value="&gt;div&lt;my value&gt;/div&lt;" />My expected shown value</option>

但实际上,处理此问题的正确方法是不要将大量 html 放入一个值中。那只是自找麻烦。由于用户可以自由地操作其中的内容,并且您的系统接受该值是 html,因此您可能会将系统打开到一些与安全相关的问题。

此外,通过发送隐藏在页面内的数百行 html,然后要求浏览器将它们发回,您给服务器和浏览器带来了额外的压力。

只需发送某种标识符并将 html 隐藏在您的服务器上的某个地方。这对每个人来说都更安全。


推荐阅读