HTMLPurifier/AttrDef/HTML/ID.php Quellcode

ID.php
gehe zur Dokumentation dieser Datei
1 <?php
2 
13 {
14 
15  // selector is NOT a valid thing to use for IDREFs, because IDREFs
16  // *must* target IDs that exist, whereas selector #ids do not.
17 
23  protected $selector;
24 
28  public function __construct($selector = false)
29  {
30  $this->selector = $selector;
31  }
32 
39  public function validate($id, $config, $context)
40  {
41  if (!$this->selector && !$config->get('Attr.EnableID')) {
42  return false;
43  }
44 
45  $id = trim($id); // trim it first
46 
47  if ($id === '') {
48  return false;
49  }
50 
51  $prefix = $config->get('Attr.IDPrefix');
52  if ($prefix !== '') {
53  $prefix .= $config->get('Attr.IDPrefixLocal');
54  // prevent re-appending the prefix
55  if (strpos($id, $prefix) !== 0) {
56  $id = $prefix . $id;
57  }
58  } elseif ($config->get('Attr.IDPrefixLocal') !== '') {
59  trigger_error(
60  '%Attr.IDPrefixLocal cannot be used unless ' .
61  '%Attr.IDPrefix is set',
62  E_USER_WARNING
63  );
64  }
65 
66  if (!$this->selector) {
67  $id_accumulator =& $context->get('IDAccumulator');
68  if (isset($id_accumulator->ids[$id])) {
69  return false;
70  }
71  }
72 
73  // we purposely avoid using regex, hopefully this is faster
74 
75  if (ctype_alpha($id)) {
76  $result = true;
77  } else {
78  if (!ctype_alpha(@$id[0])) {
79  return false;
80  }
81  // primitive style of regexps, I suppose
82  $trim = trim(
83  $id,
84  'A..Za..z0..9:-._'
85  );
86  $result = ($trim === '');
87  }
88 
89  $regexp = $config->get('Attr.IDBlacklistRegexp');
90  if ($regexp && preg_match($regexp, $id)) {
91  return false;
92  }
93 
94  if (!$this->selector && $result) {
95  $id_accumulator->add($id);
96  }
97 
98  // if no change was made to the ID, return the result
99  // else, return the new id if stripping whitespace made it
100  // valid, or return false.
101  return $result ? $id : false;
102  }
103 }
104 
105 // vim: et sw=4 sts=4




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.