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}。これらのプロパティの1つは、任意の文字Lのプロパティです。したがって、次のように置き換えることができます:\w\p{L}0-9_

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

また、文字クラスでピリオドをエスケープする必要はなく、エスケープを回避するために最後にハイフンを付けることができます。

于 2012-11-08T10:59:52.537 に答える