4

根据验证器中的html 语法文档和反复试验,我认为 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'

现在有人使用这样的字符可能看起来很疯狂,但实际上它确实有效,尽管 css 似乎没有验证是否已转义

你如何在 PHP 中实现这一点?如何编写消毒剂以允许特殊的字母字符?这可能通过正则表达式吗?为什么是ctype_graph('é')假的?

4

1 回答 1

4

PHP 的正则表达式引擎 PCRE 支持Unicode 字符\p{property}属性。其中一个属性是任何字母L的属性。所以你可以替换为:\w\p{L}0-9_

'/[^\p{L}0-9_.-]/'

字符类中也不需要转义句点,并且可以在末尾放置连字符以避免转义。

于 2012-11-08T10:59:52.537 回答