xref: /webtrees/app/Html.php (revision 43e2aec9e526d1a242c3e80ff940736aec157724)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2018 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16namespace Fisharebest\Webtrees;
17
18/**
19 * Class Html - Add HTML markup to elements consistently.
20 */
21class Html
22{
23    /**
24     * Escape a string for inclusion within HTML.
25     *
26     * @param $string
27     *
28     * @return string
29     */
30    public static function escape($string)
31    {
32        return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
33    }
34
35    /**
36     * Convert an array of HTML attributes to an HTML string.
37     *
38     * @param array $attributes
39     *
40     * @return string
41     */
42    public static function attributes(array $attributes)
43    {
44        $html = [];
45        foreach ($attributes as $key => $value) {
46            if (is_string($value) || is_integer($value)) {
47                $html[] = self::escape($key) . '="' . self::escape($value) . '"';
48            } elseif ($value !== false) {
49                $html[] = self::escape($key);
50            }
51        }
52
53        return implode(' ', $html);
54    }
55
56    /**
57     * Encode a URL.
58     *
59     * @param string $path
60     * @param array  $data
61     *
62     * @return string
63     */
64    public static function url($path, array $data)
65    {
66        $path = strtr($path, ' ', '%20');
67
68        return $path . '?' . http_build_query($data, '', '&', PHP_QUERY_RFC3986);
69    }
70
71    /**
72     * Filenames are (almost?) always LTR, even on RTL systems.
73     *
74     * @param string $filename
75     *
76     * @return string
77     */
78    public static function filename($filename)
79    {
80        return '<samp class="filename" dir="ltr">' . self::escape($filename) . '</samp>';
81    }
82}
83