1<?php
2
3/**
4 * Validates tel (for phone numbers).
5 *
6 * The relevant specifications for this protocol are RFC 3966 and RFC 5341,
7 * but this class takes a much simpler approach: we normalize phone
8 * numbers so that they only include (possibly) a leading plus,
9 * and then any number of digits and x'es.
10 */
11
12class HTMLPurifier_URIScheme_tel extends HTMLPurifier_URIScheme
13{
14    /**
15     * @type bool
16     */
17    public $browsable = false;
18
19    /**
20     * @type bool
21     */
22    public $may_omit_host = true;
23
24    /**
25     * @param HTMLPurifier_URI $uri
26     * @param HTMLPurifier_Config $config
27     * @param HTMLPurifier_Context $context
28     * @return bool
29     */
30    public function doValidate(&$uri, $config, $context)
31    {
32        $uri->userinfo = null;
33        $uri->host     = null;
34        $uri->port     = null;
35
36        // Delete all non-numeric characters, non-x characters
37        // from phone number, EXCEPT for a leading plus sign.
38        $uri->path = preg_replace('/(?!^\+)[^\dx]/', '',
39                     // Normalize e(x)tension to lower-case
40                     str_replace('X', 'x', $uri->path));
41
42        return true;
43    }
44}
45
46// vim: et sw=4 sts=4
47