php - 清理属性名称

标签 php regex html encoding

基于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/

相关文章:

php - PHP 中 MySQL 的分页结果

php - Windows机器上的Hadoop Hello world

php - PHP + Mysql(UTF-8)某些字符仍然存在错误

php - 在 PHP 中缓存变量

javascript - 使用 Jquery 数据表禁用智能搜索/正则表达式

regex - 在 Ext JS 中搜索模式

javascript - 快速提问,如何在不同的容器上而不是在它的正下方打开选项卡的事件内容?

javascript - 正则表达式保护(绕过 XSS 或开放重定向)- Javascript

javascript - 为教育工具创建逐步点击 HTML5/Javascript 图形

php - 如何让buddypress个人资料菜单显示用户名和用户照片?