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