基于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 中做到这一点?如何编写 sanitizer 程序以允许使用特殊的字母字符?这可能通过正则表达式吗?为什么 ctype_graph('é')
是假的?
最佳答案
PHP 的正则表达式引擎PCRE 支持Unicode character properties使用 \p{property}
。 L
是这些属性之一,它是任何 字母的属性。因此,您可以将 \w
替换为 \p{L}0-9_
:
'/[^\p{L}0-9_.-]/'
字符类中也不需要转义句号,可以在末尾加上连字符来避免转义。
关于php - 清理属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13283699/