PHP的uniqid函数用于HTML id属性是否安全?

4

我想在HTML中使用一个随机的id属性:

<?php $id = uniqid(); ?>
<div data-cycle-prev="#<?php echo $id; ?>_slideshow_prev">
    <div id="<?php echo $id; ?>_slideshow_prev"></div>
</div>

我使用PHP方法uniqid来生成它,但我不知道它是否安全且符合W3C标准?
我关心的是生成的HTML是否符合规范,因为PHP输出的HTML中并非所有字符都被允许在HTML属性中出现,所以我想知道uniqid()是否只生成允许的字符。

2
我认为使用这个没有任何问题。唯一与安全相关的问题是,如果您不希望某人或机器人找出随机字符生成了什么,或者正在尝试保护文档。据我所知,PHP与W3C兼容无关;HTML有关。 - Funk Forty Niner
谢谢你的回答。我对合规性的担忧是针对生成的HTML PHP输出的。并非所有字符都允许在HTML属性中使用,因此我想知道uniqid()是否只生成允许的字符。 - drskullster
2
不用谢。请查看手册http://php.net/manual/en/function.uniqid.php。 - Funk Forty Niner
你为什么需要在那里使用一个ID? - PeeHaa
我需要它用于jquery cycle2插件。我想在页面上有多个幻灯片展示,并且仍然能够为控件分配ID(data-cycle-prev属性对应于DOM元素,然后我可以将其放置在任何我想要的地方)。 - drskullster
2个回答

3

1
如果在$more_entropy参数中传递true,则它还将包括句点。在这种情况下,对于ID属性来说是不安全的。 - JW.

2

是的,只要您不两次生成相同的ID,那么它是安全的,而这种情况非常不可能发生。

我会采用另一种方式。也许您想将此引入到您的库中。

function getNextInt() {
    static $i = 0;
    $i++;
    return $i;
}

在您的模板中:

<?php $id = getNextInt(); ?>
<div data-cycle-prev="#<?php echo $id; ?>_slideshow_prev">
    <div id="<?php echo $id; ?>_slideshow_prev"></div>
</div>

如果您正在使用较旧版本的HTML,我们需要首先使用字母作为id(在评论中由@mb21提出):

<?php $id = 'mycontrol' . getNextInt(); ?>

2
请注意,在 HTML 4 及更早版本中,id 必须以字母开头。 - mb21
不,这不是黑客行为。这是一种语言特性,不仅限于PHP。静态意味着变量在第一次调用时被初始化,但在下一次调用时,它将可用,并保留上次的值。 - Christian Gollhardt
有趣的想法@ChristianGollhardt! - drskullster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接