HTML选项:显示值而不是实际文本

时间:2018-09-23 09:00:00

标签: 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行。

所以我在想它会显示较大的那个,还是我在这里错了?

1 个答案:

答案 0 :(得分:1)

问题在于您的值包含html;如果将“原样”输出到页面(如此处所做的操作),则浏览器将在值内看到结束符号,认为您打算关闭标签,然后将其后的所有内容都视为包含元素。 / p>

基本上,您正在产生如下输出:

<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藏在服务器上的某个位置即可。这对每个人都更安全。