所以我在这里有些困惑。
我的代码是:
<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行。
所以我在想它会显示较大的那个,还是我在这里错了?
答案 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=">div<my value>/div<" />My expected shown value</option>
但实际上,处理此问题的正确方法是不将大量html放在值中。那只是自找麻烦。由于用户可以自由操纵其中的内容,并且系统接受值是html,因此您可能会遇到一些与安全性相关的问题。
另外,通过发送隐藏在页面内的几百行html,然后要求浏览器将它们发送回去,给服务器和浏览器增加了负担。
只需发送某种标识符,并将html藏在服务器上的某个位置即可。这对每个人都更安全。