使用$(element).val();使用html实体。

时间:2017-05-15 19:38:58

标签: php jquery

每当用户使用php向用户配置文件输入内容时,我都会使用字符串过滤器将其转换为html实体。

当用户晚点编辑他们的个人资料时...不确定我是否正确这样做。但是我使用php循环遍历所有字段并设置其后续“键”,这是输入名称,其值在db中。

<?php php foreach ($usermeta as $key=>$value){ ?>
<script> $("<? echo $key; ?>").val("<? echo $val ;?>"); </script>
<?php } ?>

这个工作很棒。但是html实体没有被转换回来?我该怎么做呢?当你将html实体输入撇号或逗号时,有没有办法在不破坏jquery的情况下完成它?

我不能只将每个值都回显到输入值,因为在某些情况下我有下拉列表,据我所知...通过php循环遍历您的值并通过jquery设置值是设置下拉列表的唯一方法。

2 个答案:

答案 0 :(得分:0)

要回答最初的问题,在回显事物之前需要decode the entities

$("<? echo $key; ?>").val("<? echo(html_entity_decode($val)); ?>");

至于这样做是否是一个好主意,不,不是真的。输出表单时,可以直接在输入值中设置,如:

<input type="text" name="foo" value="<?php echo(html_entity_decode($usermeta->foo)); ?>">

另一种选择是对您的$usermeta进行JSON编码并在脚本标记中进行设置。然后让javascript更新字段。

答案 1 :(得分:0)

javascript中的html_entity_decode函数

let html_entity_decode = function(str) {
  return str.replace(/&#(x[0-9a-fA-F]+|\d+);/g, function(match, dec) {
    return String.fromCharCode(dec.substr(0, 1) == 'x' ? parseInt(dec.substr(1), 16) : dec);
  })
};

例如使用


alert(html_entity_decode('&#39640;&#32423;&#31243;&#24207;&#35774;&#35745;'))