Blame view

libraries/regularlabs/src/Title.php 2.43 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
<?php
/**
 * @package         Regular Labs Library
 * @version         18.2.10140
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            http://www.regularlabs.com
 * @copyright       Copyright © 2018 Regular Labs All Rights Reserved
 * @license         http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

namespace RegularLabs\Library;

defined('_JEXEC') or die;

/**
 * Class Title
 * @package RegularLabs\Library
 */
class Title
{
	/**
	 * Cleans the string to make it usable as a title
	 *
	 * @param string $string
	 * @param bool   $strip_tags
	 * @param bool   $strip_spaces
	 *
	 * @return string
	 */
	public static function clean($string = '', $strip_tags = false, $strip_spaces = true)
	{
		if (empty($string))
		{
			return '';
		}

		// remove comment tags
		$string = RegEx::replace('<\!--.*?-->', '', $string);

		// replace weird whitespace
		$string = str_replace(chr(194) . chr(160), ' ', $string);

		if ($strip_tags)
		{
			// remove svgs
			$string = RegEx::replace('<svg.*?</svg>', '', $string);
			// remove html tags
			$string = RegEx::replace('</?[a-z][^>]*>', '', $string);
			// remove comments tags
			$string = RegEx::replace('<\!--.*?-->', '', $string);
		}

		if ($strip_spaces)
		{
			// Replace html spaces
			$string = str_replace(['&nbsp;', '&#160;'], ' ', $string);

			// Remove duplicate whitespace
			$string = RegEx::replace('[ \n\r\t]+', ' ', $string);
		}

		return trim($string);
	}

	/**
	 * Creates an array of different syntaxes of titles to match against a url variable
	 *
	 * @param array $titles
	 *
	 * @return array
	 */
	public static function getUrlMatches($titles = [])
	{
		$matches = [];
		foreach ($titles as $title)
		{
			$matches[] = $title;
			$matches[] = StringHelper::strtolower($title);
		}

		$matches = array_unique($matches);

		foreach ($matches as $title)
		{
			$matches[] = htmlspecialchars(StringHelper::html_entity_decoder($title));
		}

		$matches = array_unique($matches);

		foreach ($matches as $title)
		{
			$matches[] = urlencode($title);
			$matches[] = utf8_decode($title);
			$matches[] = str_replace(' ', '', $title);
			$matches[] = trim(RegEx::replace('[^a-z0-9]', '', $title));
			$matches[] = trim(RegEx::replace('[^a-z]', '', $title));
		}

		$matches = array_unique($matches);

		foreach ($matches as $i => $title)
		{
			$matches[$i] = trim(str_replace('?', '', $title));
		}

		$matches = array_diff(array_unique($matches), ['', '-']);

		return $matches;
	}
}