1<?php 2/** 3 * webtrees: online genealogy 4 * Copyright (C) 2017 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 * Escape a string for inclusion within HTML. 24 * 25 * @param $string 26 * 27 * @return string 28 */ 29 public static function escape($string) { 30 return htmlspecialchars($string, ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE, 'UTF-8'); 31 } 32 33 /** 34 * Convert an array of HTML attributes to an HTML string. 35 * 36 * @param array $attributes 37 * 38 * @return string 39 */ 40 public static function attributes(array $attributes) { 41 $html = []; 42 foreach ($attributes as $key => $value) { 43 if (is_string($value) || is_integer($value)) { 44 $html[] = self::escape($key) . '="' . self::escape($value) . '"'; 45 } elseif ($value !== false) { 46 $html[] = self::escape($key); 47 } 48 } 49 50 return implode(' ', $html); 51 } 52 53 /** 54 * Encode a URL. 55 * 56 * @param string $path 57 * @param string[] $data 58 * @param string $arg_separator "&" or "&s" 59 * 60 * @return string 61 */ 62 public static function url($path, array $data, $arg_separator) { 63 return rawurlencode($path) . '?' . http_build_query($data, '', $arg_separator, PHP_QUERY_RFC3986); 64 } 65 66 /** 67 * Filenames are (almost?) always LTR, even on RTL systems. 68 * 69 * @param string $filename 70 * 71 * @return string 72 */ 73 public static function filename($filename) { 74 return '<samp class="filename" dir="ltr">' . self::escape($filename) . '</samp>'; 75 } 76} 77