【发布时间】:2012-10-28 08:01:13
【问题描述】:
基于html syntax docs和validator中的反复试验,我认为HTML属性名称中允许的字符是:
- 字母数字
- 连字符
- 下划线
- 周期
例如这些验证:
<p data-éxample>
<p data-1.5>
我想编写一个清理属性名称的函数:
<?php
function sanitize_attr_name ( $name ) {
return is_string($name) ? preg_replace( '/[^\w\-\.]/', '', $name ) : '';
}
除了特殊的字母字符外,这都有效:
sanitize_attr_name( 'data-éxample' ); // 'data-xample'
现在有人使用这样的字符可能看起来很疯狂,但 does in fact work 尽管 css 似乎无法验证 escaped or not。
如何在 PHP 中实现这一点?如何编写消毒剂以允许特殊的字母字符?这可能通过正则表达式吗?为什么ctype_graph('é') 是假的?
【问题讨论】:
-
您的正则表达式是正确的,应该可以工作。您可以尝试更具体并使用以下正则表达式
[^A-Za-z0-9_\-\.] -
@Pogo 是的,这是同一个正则表达式。它消除了特殊的 alpha 字符,例如
é。我很想知道是否可以通过正则表达式或其他方式将特殊 alpha 字符列入白名单/目标。 -
@ryanve 尝试用
\p{L}替换\w。 PHP'S PCRE Unicode documentation