1214 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1214 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| function wptexturize($text) {
 | |
| 	$output = '';
 | |
| 	// Capture tags and everything inside them
 | |
| 	$textarr = preg_split("/(<.*>)/Us", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
 | |
| 	$stop = count($textarr);
 | |
| 	$skip = 0; // loop stuff
 | |
| 	for($i = 0; $i < $stop; $i++) {
 | |
| 		$curl = $textarr [$i];
 | |
| 		
 | |
| 		if (isset($curl {0}) && '<' != $curl {0} && $skip == 0) { // If it's not a tag
 | |
| 			$curl = str_replace('---', '—', $curl);
 | |
| 			$curl = str_replace(' -- ', ' — ', $curl);
 | |
| 			$curl = str_replace('--', '–', $curl);
 | |
| 			$curl = str_replace('xn–', 'xn--', $curl);
 | |
| 			$curl = str_replace('...', '…', $curl);
 | |
| 			$curl = str_replace('``', '“', $curl);
 | |
| 			
 | |
| 			// This is a hack, look at this more later. It works pretty well though.
 | |
| 			$cockney = array(
 | |
| 				"'tain't",
 | |
| 				"'twere",
 | |
| 				"'twas",
 | |
| 				"'tis",
 | |
| 				"'twill",
 | |
| 				"'til",
 | |
| 				"'bout",
 | |
| 				"'nuff",
 | |
| 				"'round",
 | |
| 				"'cause"
 | |
| 			);
 | |
| 			$cockneyreplace = array(
 | |
| 				"’tain’t",
 | |
| 				"’twere",
 | |
| 				"’twas",
 | |
| 				"’tis",
 | |
| 				"’twill",
 | |
| 				"’til",
 | |
| 				"’bout",
 | |
| 				"’nuff",
 | |
| 				"’round",
 | |
| 				"’cause"
 | |
| 			);
 | |
| 			$curl = str_replace($cockney, $cockneyreplace, $curl);
 | |
| 			
 | |
| 			$curl = preg_replace("/'s/", '’s', $curl);
 | |
| 			$curl = preg_replace("/'(\d\d(?:’|')?s)/", "’$1", $curl);
 | |
| 			$curl = preg_replace('/(\s|\A|")\'/', '$1‘', $curl);
 | |
| 			// $curl = preg_replace('/(\d+)"/', '$1″', $curl);
 | |
| 			
 | |
| 			$curl = preg_replace('/(\s|\A)("|")(?!\s)/', '$1“$3', $curl);
 | |
| 			
 | |
| 			$curl = preg_replace("/(\d+)'/", '$1′', $curl);
 | |
| 			$curl = preg_replace("/(\S)'([^'\s])/", "$1’$2", $curl);
 | |
| 			// $curl = preg_replace('/(\s|\A)"(?!\s)/', '$1“$2', $curl);
 | |
| 			
 | |
| 			$curl = preg_replace('/(\s|\A)("|")(?!\s)/', '$1“$3', $curl);
 | |
| 			
 | |
| 			$curl = preg_replace('/("|")(\s|\S|\Z)/', '”$2', $curl);
 | |
| 			$curl = preg_replace("/'([\s.]|\Z)/", '’$1', $curl);
 | |
| 			$curl = preg_replace("/ \(tm\)/i", ' ™', $curl);
 | |
| 			$curl = str_replace("''", '”', $curl);
 | |
| 			
 | |
| 			$curl = preg_replace('/(\d+)x(\d+)/', "$1×$2", $curl);
 | |
| 		} elseif (strstr($curl, '</') || strstr($curl, '/>')) {
 | |
| 			if ($skip > 0)
 | |
| 				$skip--;
 | |
| 		} elseif (strstr($curl, '<code') || strstr($curl, '<pre') || strstr($curl, '<kbd') || strstr($curl, '<style') || strstr($curl, '<script')) {
 | |
| 			// strstr is fast
 | |
| 			$skip++;
 | |
| 		} else {
 | |
| 			if (isset($curl {0}) && $curl {0} == "<" && $skip > 0)
 | |
| 				$skip++;
 | |
| 		}
 | |
| 		$curl = preg_replace('/&([^#])(?![a-z12]{1,8};)/', '&$1', $curl);
 | |
| 		$output .= $curl;
 | |
| 	}
 | |
| 	return $output;
 | |
| }
 | |
| 
 | |
| function clean_pre($matches) {
 | |
| 	if (is_array($matches))
 | |
| 		$text = $matches [1] . $matches [2] . "</pre>";
 | |
| 	else
 | |
| 		$text = $matches;
 | |
| 	
 | |
| 	/* NWM: a bit hackish? where are the slashes for double quotes added? */
 | |
| 	$text = str_replace('\"', '"', $text);
 | |
| 	$text = str_replace('<br />', '', $text);
 | |
| 	$text = str_replace('<p>', "\n", $text);
 | |
| 	$text = str_replace('</p>', '', $text);
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Replaces double line-breaks with paragraph elements.
 | |
|  *
 | |
|  * A group of regex replaces used to identify text formatted with newlines and
 | |
|  * replace double line-breaks with HTML paragraph tags. The remaining
 | |
|  * line-breaks after conversion become <<br />> tags, unless $br is set to '0'
 | |
|  * or 'false'.
 | |
|  *
 | |
|  * @since 0.71
 | |
|  *       
 | |
|  * @param string $pee
 | |
|  *        	The text which has to be formatted.
 | |
|  * @param int|bool $br
 | |
|  *        	Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true.
 | |
|  * @return string Text which has been converted into correct paragraph tags.
 | |
|  */
 | |
| function wpautop($pee, $br = 1) {
 | |
| 	if (trim($pee) === '')
 | |
| 		return '';
 | |
| 	$pee = $pee . "\n"; // just to make things a little easier, pad the end
 | |
| 	$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
 | |
| 	// Space things out a little
 | |
| 	$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
 | |
| 	$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
 | |
| 	$pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
 | |
| 	$pee = str_replace(array(
 | |
| 		"\r\n",
 | |
| 		"\r"
 | |
| 	), "\n", $pee); // cross-platform newlines
 | |
| 	if (strpos($pee, '<object') !== false) {
 | |
| 		$pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
 | |
| 		$pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
 | |
| 	}
 | |
| 	$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
 | |
| 	                                              // make paragraphs, including one at the end
 | |
| 	$pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
 | |
| 	$pee = '';
 | |
| 	foreach ($pees as $tinkle)
 | |
| 		$pee .= '<p>' . trim($tinkle, "\n") . "</p>\n";
 | |
| 	$pee = preg_replace('|<p>\s*</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
 | |
| 	$pee = preg_replace('!<p>([^<]+)</(div|address|form)>!', "<p>$1</p></$2>", $pee);
 | |
| 	$pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
 | |
| 	$pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
 | |
| 	$pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
 | |
| 	$pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
 | |
| 	$pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
 | |
| 	$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
 | |
| 	if ($br) {
 | |
| 		$pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);
 | |
| 		$pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
 | |
| 		$pee = str_replace('<WPPreserveNewline />', "\n", $pee);
 | |
| 	}
 | |
| 	$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
 | |
| 	$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
 | |
| 	if (strpos($pee, '<pre') !== false)
 | |
| 		$pee = preg_replace_callback('!(<pre[^>]*>)(.*?)</pre>!is', 'clean_pre', $pee);
 | |
| 	$pee = preg_replace("|\n</p>$|", '</p>', $pee);
 | |
| 	
 | |
| 	return $pee;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Newline preservation help function for wpautop
 | |
|  *
 | |
|  * @since 3.1.0
 | |
|  * @access private
 | |
|  * @param array $matches
 | |
|  *        	preg_replace_callback matches array
 | |
|  * @returns string
 | |
|  */
 | |
| function _autop_newline_preservation_helper($matches) {
 | |
| 	return str_replace("\n", "<WPPreserveNewline />", $matches [0]);
 | |
| }
 | |
| 
 | |
| function seems_utf8($Str) { // by bmorel at ssi dot fr
 | |
| 	for($i = 0; $i < strlen($Str); $i++) {
 | |
| 		if (ord($Str [$i]) < 0x80)
 | |
| 			continue; // 0bbbbbbb
 | |
| 		elseif ((ord($Str [$i]) & 0xE0) == 0xC0)
 | |
| 			$n = 1; // 110bbbbb
 | |
| 		elseif ((ord($Str [$i]) & 0xF0) == 0xE0)
 | |
| 			$n = 2; // 1110bbbb
 | |
| 		elseif ((ord($Str [$i]) & 0xF8) == 0xF0)
 | |
| 			$n = 3; // 11110bbb
 | |
| 		elseif ((ord($Str [$i]) & 0xFC) == 0xF8)
 | |
| 			$n = 4; // 111110bb
 | |
| 		elseif ((ord($Str [$i]) & 0xFE) == 0xFC)
 | |
| 			$n = 5; // 1111110b
 | |
| 		else
 | |
| 			return false; // Does not match any model
 | |
| 		for($j = 0; $j < $n; $j++) { // n bytes matching 10bbbbbb follow ?
 | |
| 			if ((++$i == strlen($Str)) || ((ord($Str [$i]) & 0xC0) != 0x80))
 | |
| 				return false;
 | |
| 		}
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| function fmt_escape_separator($text, $sep = '|') {
 | |
| 	return str_replace('|', '|', $text);
 | |
| }
 | |
| 
 | |
| function fmt_unescape_separator($text, $sep = '|') {
 | |
| 	return str_replace('|', '|', $text);
 | |
| }
 | |
| 
 | |
| function wp_specialchars($text, $quotes = 0) {
 | |
| 	// Like htmlspecialchars except don't double-encode HTML entities
 | |
| 	$text = preg_replace('/&([^#])(?![a-z12]{1,8};)/', '&$1', $text);
 | |
| 	$text = str_replace('<', '<', $text);
 | |
| 	$text = str_replace('>', '>', $text);
 | |
| 	if ($quotes) {
 | |
| 		$text = str_replace('"', '"', $text);
 | |
| 		$text = str_replace("'", ''', $text);
 | |
| 	}
 | |
| 	
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| function utf8_uri_encode($utf8_string) {
 | |
| 	$unicode = '';
 | |
| 	$values = array();
 | |
| 	$num_octets = 1;
 | |
| 	
 | |
| 	for($i = 0; $i < strlen($utf8_string); $i++) {
 | |
| 		
 | |
| 		$value = ord($utf8_string [$i]);
 | |
| 		
 | |
| 		if ($value < 128) {
 | |
| 			$unicode .= chr($value);
 | |
| 		} else {
 | |
| 			if (count($values) == 0)
 | |
| 				$num_octets = ($value < 224) ? 2 : 3;
 | |
| 			
 | |
| 			$values [] = $value;
 | |
| 			
 | |
| 			if (count($values) == $num_octets) {
 | |
| 				if ($num_octets == 3) {
 | |
| 					$unicode .= '%' . dechex($values [0]) . '%' . dechex($values [1]) . '%' . dechex($values [2]);
 | |
| 				} else {
 | |
| 					$unicode .= '%' . dechex($values [0]) . '%' . dechex($values [1]);
 | |
| 				}
 | |
| 				
 | |
| 				$values = array();
 | |
| 				$num_octets = 1;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	return $unicode;
 | |
| }
 | |
| 
 | |
| function remove_accents($string) {
 | |
| 	if (seems_utf8($string)) {
 | |
| 		$chars = array(
 | |
| 			// Decompositions for Latin-1 Supplement
 | |
| 			chr(195) . chr(128) => 'A',
 | |
| 			chr(195) . chr(129) => 'A',
 | |
| 			chr(195) . chr(130) => 'A',
 | |
| 			chr(195) . chr(131) => 'A',
 | |
| 			chr(195) . chr(132) => 'A',
 | |
| 			chr(195) . chr(133) => 'A',
 | |
| 			chr(195) . chr(135) => 'C',
 | |
| 			chr(195) . chr(136) => 'E',
 | |
| 			chr(195) . chr(137) => 'E',
 | |
| 			chr(195) . chr(138) => 'E',
 | |
| 			chr(195) . chr(139) => 'E',
 | |
| 			chr(195) . chr(140) => 'I',
 | |
| 			chr(195) . chr(141) => 'I',
 | |
| 			chr(195) . chr(142) => 'I',
 | |
| 			chr(195) . chr(143) => 'I',
 | |
| 			chr(195) . chr(145) => 'N',
 | |
| 			chr(195) . chr(146) => 'O',
 | |
| 			chr(195) . chr(147) => 'O',
 | |
| 			chr(195) . chr(148) => 'O',
 | |
| 			chr(195) . chr(149) => 'O',
 | |
| 			chr(195) . chr(150) => 'O',
 | |
| 			chr(195) . chr(153) => 'U',
 | |
| 			chr(195) . chr(154) => 'U',
 | |
| 			chr(195) . chr(155) => 'U',
 | |
| 			chr(195) . chr(156) => 'U',
 | |
| 			chr(195) . chr(157) => 'Y',
 | |
| 			chr(195) . chr(159) => 's',
 | |
| 			chr(195) . chr(160) => 'a',
 | |
| 			chr(195) . chr(161) => 'a',
 | |
| 			chr(195) . chr(162) => 'a',
 | |
| 			chr(195) . chr(163) => 'a',
 | |
| 			chr(195) . chr(164) => 'a',
 | |
| 			chr(195) . chr(165) => 'a',
 | |
| 			chr(195) . chr(167) => 'c',
 | |
| 			chr(195) . chr(168) => 'e',
 | |
| 			chr(195) . chr(169) => 'e',
 | |
| 			chr(195) . chr(170) => 'e',
 | |
| 			chr(195) . chr(171) => 'e',
 | |
| 			chr(195) . chr(172) => 'i',
 | |
| 			chr(195) . chr(173) => 'i',
 | |
| 			chr(195) . chr(174) => 'i',
 | |
| 			chr(195) . chr(175) => 'i',
 | |
| 			chr(195) . chr(177) => 'n',
 | |
| 			chr(195) . chr(178) => 'o',
 | |
| 			chr(195) . chr(179) => 'o',
 | |
| 			chr(195) . chr(180) => 'o',
 | |
| 			chr(195) . chr(181) => 'o',
 | |
| 			chr(195) . chr(182) => 'o',
 | |
| 			chr(195) . chr(182) => 'o',
 | |
| 			chr(195) . chr(185) => 'u',
 | |
| 			chr(195) . chr(186) => 'u',
 | |
| 			chr(195) . chr(187) => 'u',
 | |
| 			chr(195) . chr(188) => 'u',
 | |
| 			chr(195) . chr(189) => 'y',
 | |
| 			chr(195) . chr(191) => 'y',
 | |
| 			// Decompositions for Latin Extended-A
 | |
| 			chr(196) . chr(128) => 'A',
 | |
| 			chr(196) . chr(129) => 'a',
 | |
| 			chr(196) . chr(130) => 'A',
 | |
| 			chr(196) . chr(131) => 'a',
 | |
| 			chr(196) . chr(132) => 'A',
 | |
| 			chr(196) . chr(133) => 'a',
 | |
| 			chr(196) . chr(134) => 'C',
 | |
| 			chr(196) . chr(134) => 'c',
 | |
| 			chr(196) . chr(136) => 'C',
 | |
| 			chr(196) . chr(137) => 'c',
 | |
| 			chr(196) . chr(138) => 'C',
 | |
| 			chr(196) . chr(139) => 'c',
 | |
| 			chr(196) . chr(140) => 'C',
 | |
| 			chr(196) . chr(141) => 'c',
 | |
| 			chr(196) . chr(142) => 'D',
 | |
| 			chr(196) . chr(143) => 'd',
 | |
| 			chr(196) . chr(144) => 'D',
 | |
| 			chr(196) . chr(145) => 'd',
 | |
| 			chr(196) . chr(146) => 'E',
 | |
| 			chr(196) . chr(147) => 'e',
 | |
| 			chr(196) . chr(148) => 'E',
 | |
| 			chr(196) . chr(149) => 'e',
 | |
| 			chr(196) . chr(150) => 'E',
 | |
| 			chr(196) . chr(151) => 'e',
 | |
| 			chr(196) . chr(152) => 'E',
 | |
| 			chr(196) . chr(153) => 'e',
 | |
| 			chr(196) . chr(154) => 'E',
 | |
| 			chr(196) . chr(155) => 'e',
 | |
| 			chr(196) . chr(156) => 'G',
 | |
| 			chr(196) . chr(157) => 'g',
 | |
| 			chr(196) . chr(158) => 'G',
 | |
| 			chr(196) . chr(159) => 'g',
 | |
| 			chr(196) . chr(160) => 'G',
 | |
| 			chr(196) . chr(161) => 'g',
 | |
| 			chr(196) . chr(162) => 'G',
 | |
| 			chr(196) . chr(163) => 'g',
 | |
| 			chr(196) . chr(164) => 'H',
 | |
| 			chr(196) . chr(165) => 'h',
 | |
| 			chr(196) . chr(166) => 'H',
 | |
| 			chr(196) . chr(167) => 'h',
 | |
| 			chr(196) . chr(168) => 'I',
 | |
| 			chr(196) . chr(169) => 'i',
 | |
| 			chr(196) . chr(170) => 'I',
 | |
| 			chr(196) . chr(171) => 'i',
 | |
| 			chr(196) . chr(172) => 'I',
 | |
| 			chr(196) . chr(173) => 'i',
 | |
| 			chr(196) . chr(174) => 'I',
 | |
| 			chr(196) . chr(175) => 'i',
 | |
| 			chr(196) . chr(176) => 'I',
 | |
| 			chr(196) . chr(177) => 'i',
 | |
| 			chr(196) . chr(178) => 'IJ',
 | |
| 			chr(196) . chr(179) => 'ij',
 | |
| 			chr(196) . chr(180) => 'J',
 | |
| 			chr(196) . chr(181) => 'j',
 | |
| 			chr(196) . chr(182) => 'K',
 | |
| 			chr(196) . chr(183) => 'k',
 | |
| 			chr(196) . chr(184) => 'k',
 | |
| 			chr(196) . chr(185) => 'L',
 | |
| 			chr(196) . chr(186) => 'l',
 | |
| 			chr(196) . chr(187) => 'L',
 | |
| 			chr(196) . chr(188) => 'l',
 | |
| 			chr(196) . chr(189) => 'L',
 | |
| 			chr(196) . chr(190) => 'l',
 | |
| 			chr(196) . chr(191) => 'L',
 | |
| 			chr(197) . chr(128) => 'l',
 | |
| 			chr(196) . chr(129) => 'L',
 | |
| 			chr(197) . chr(130) => 'l',
 | |
| 			chr(196) . chr(131) => 'N',
 | |
| 			chr(197) . chr(132) => 'n',
 | |
| 			chr(196) . chr(133) => 'N',
 | |
| 			chr(197) . chr(134) => 'n',
 | |
| 			chr(196) . chr(135) => 'N',
 | |
| 			chr(197) . chr(136) => 'n',
 | |
| 			chr(196) . chr(137) => 'N',
 | |
| 			chr(197) . chr(138) => 'n',
 | |
| 			chr(196) . chr(139) => 'N',
 | |
| 			chr(197) . chr(140) => 'O',
 | |
| 			chr(196) . chr(141) => 'o',
 | |
| 			chr(197) . chr(142) => 'O',
 | |
| 			chr(196) . chr(143) => 'o',
 | |
| 			chr(197) . chr(144) => 'O',
 | |
| 			chr(196) . chr(145) => 'o',
 | |
| 			chr(197) . chr(146) => 'OE',
 | |
| 			chr(197) . chr(147) => 'oe',
 | |
| 			chr(197) . chr(148) => 'R',
 | |
| 			chr(197) . chr(149) => 'r',
 | |
| 			chr(197) . chr(150) => 'R',
 | |
| 			chr(197) . chr(151) => 'r',
 | |
| 			chr(197) . chr(152) => 'R',
 | |
| 			chr(197) . chr(153) => 'r',
 | |
| 			chr(197) . chr(154) => 'S',
 | |
| 			chr(197) . chr(155) => 's',
 | |
| 			chr(197) . chr(156) => 'S',
 | |
| 			chr(197) . chr(157) => 's',
 | |
| 			chr(197) . chr(158) => 'S',
 | |
| 			chr(197) . chr(159) => 's',
 | |
| 			chr(197) . chr(160) => 'S',
 | |
| 			chr(197) . chr(161) => 's',
 | |
| 			chr(197) . chr(162) => 'T',
 | |
| 			chr(197) . chr(163) => 't',
 | |
| 			chr(197) . chr(164) => 'T',
 | |
| 			chr(197) . chr(165) => 't',
 | |
| 			chr(197) . chr(166) => 'T',
 | |
| 			chr(197) . chr(167) => 't',
 | |
| 			chr(197) . chr(168) => 'U',
 | |
| 			chr(197) . chr(169) => 'u',
 | |
| 			chr(197) . chr(170) => 'U',
 | |
| 			chr(197) . chr(171) => 'u',
 | |
| 			chr(197) . chr(172) => 'U',
 | |
| 			chr(197) . chr(173) => 'u',
 | |
| 			chr(197) . chr(174) => 'U',
 | |
| 			chr(197) . chr(175) => 'u',
 | |
| 			chr(197) . chr(176) => 'U',
 | |
| 			chr(197) . chr(177) => 'u',
 | |
| 			chr(197) . chr(178) => 'U',
 | |
| 			chr(197) . chr(179) => 'u',
 | |
| 			chr(197) . chr(180) => 'W',
 | |
| 			chr(197) . chr(181) => 'w',
 | |
| 			chr(197) . chr(182) => 'Y',
 | |
| 			chr(197) . chr(183) => 'y',
 | |
| 			chr(197) . chr(184) => 'Y',
 | |
| 			chr(197) . chr(185) => 'Z',
 | |
| 			chr(197) . chr(186) => 'z',
 | |
| 			chr(197) . chr(187) => 'Z',
 | |
| 			chr(197) . chr(188) => 'z',
 | |
| 			chr(197) . chr(189) => 'Z',
 | |
| 			chr(197) . chr(190) => 'z',
 | |
| 			chr(197) . chr(191) => 's',
 | |
| 			// Euro Sign
 | |
| 			chr(226) . chr(130) . chr(172) => 'E'
 | |
| 		);
 | |
| 		
 | |
| 		$string = strtr($string, $chars);
 | |
| 	} else {
 | |
| 		// Assume ISO-8859-1 if not UTF-8
 | |
| 		$chars ['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158) . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194) . chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202) . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210) . chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218) . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227) . chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235) . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243) . chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251) . chr(252) . chr(253) . chr(255);
 | |
| 		
 | |
| 		$chars ['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";
 | |
| 		
 | |
| 		$string = strtr($string, $chars ['in'], $chars ['out']);
 | |
| 		$double_chars ['in'] = array(
 | |
| 			chr(140),
 | |
| 			chr(156),
 | |
| 			chr(198),
 | |
| 			chr(208),
 | |
| 			chr(222),
 | |
| 			chr(223),
 | |
| 			chr(230),
 | |
| 			chr(240),
 | |
| 			chr(254)
 | |
| 		);
 | |
| 		$double_chars ['out'] = array(
 | |
| 			'OE',
 | |
| 			'oe',
 | |
| 			'AE',
 | |
| 			'DH',
 | |
| 			'TH',
 | |
| 			'ss',
 | |
| 			'ae',
 | |
| 			'dh',
 | |
| 			'th'
 | |
| 		);
 | |
| 		$string = str_replace($double_chars ['in'], $double_chars ['out'], $string);
 | |
| 	}
 | |
| 	
 | |
| 	return $string;
 | |
| }
 | |
| 
 | |
| function sanitize_title($title, $fallback_title = '') {
 | |
| 	$title = strip_tags($title);
 | |
| 	
 | |
| 	$title = apply_filters('sanitize_title', $title);
 | |
| 	
 | |
| 	if (empty($title)) {
 | |
| 		$title = $fallback_title;
 | |
| 	}
 | |
| 	
 | |
| 	return $title;
 | |
| }
 | |
| 
 | |
| function sanitize_title_with_dashes($title) {
 | |
| 	$title = strip_tags($title);
 | |
| 	
 | |
| 	if (seems_utf8($title)) {
 | |
| 		if (function_exists('mb_strtolower')) {
 | |
| 			$title = mb_strtolower($title, 'UTF-8');
 | |
| 		}
 | |
| 		$title = utf8_uri_encode($title);
 | |
| 	}
 | |
| 	
 | |
| 	// Preserve escaped octets.
 | |
| 	$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
 | |
| 	// Remove percent signs that are not part of an octet.
 | |
| 	$title = str_replace('%', '', $title);
 | |
| 	// Restore octets.
 | |
| 	$title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);
 | |
| 	// and finally: Kill octets
 | |
| 	$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '', $title);
 | |
| 	
 | |
| 	// remove accents
 | |
| 	$title = remove_accents($title);
 | |
| 	
 | |
| 	// title is in lower case always
 | |
| 	$title = strtolower($title);
 | |
| 	
 | |
| 	// kill entities
 | |
| 	$title = preg_replace('/&.+?;/', '', $title);
 | |
| 	
 | |
| 	// kill special chars
 | |
| 	$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
 | |
| 	
 | |
| 	// replace spaces by dash
 | |
| 	$title = preg_replace('/\s+/', '-', $title);
 | |
| 	// Kill multiple dashes
 | |
| 	$title = preg_replace('|-+|', '-', $title);
 | |
| 	// kill dashes at beginning and end of string
 | |
| 	$title = trim($title, '-');
 | |
| 	
 | |
| 	return $title;
 | |
| }
 | |
| 
 | |
| function convert_chars($content, $flag = 'obsolete') {
 | |
| 	// Translation of invalid Unicode references range to valid range
 | |
| 	$wp_htmltranswinuni = array(
 | |
| 		'€' => '€', // the Euro sign
 | |
| 		'' => '',
 | |
| 		'‚' => '‚', // these are Windows CP1252 specific characters
 | |
| 		'ƒ' => 'ƒ', // they would look weird on non-Windows browsers
 | |
| 		'„' => '„',
 | |
| 		'…' => '…',
 | |
| 		'†' => '†',
 | |
| 		'‡' => '‡',
 | |
| 		'ˆ' => 'ˆ',
 | |
| 		'‰' => '‰',
 | |
| 		'Š' => 'Š',
 | |
| 		'‹' => '‹',
 | |
| 		'Œ' => 'Œ',
 | |
| 		'' => '',
 | |
| 		'Ž' => 'ž',
 | |
| 		'' => '',
 | |
| 		'' => '',
 | |
| 		'‘' => '‘',
 | |
| 		'’' => '’',
 | |
| 		'“' => '“',
 | |
| 		'”' => '”',
 | |
| 		'•' => '•',
 | |
| 		'–' => '–',
 | |
| 		'—' => '—',
 | |
| 		'˜' => '˜',
 | |
| 		'™' => '™',
 | |
| 		'š' => 'š',
 | |
| 		'›' => '›',
 | |
| 		'œ' => 'œ',
 | |
| 		'' => '',
 | |
| 		'ž' => '',
 | |
| 		'Ÿ' => 'Ÿ'
 | |
| 	);
 | |
| 	
 | |
| 	// Remove metadata tags
 | |
| 	$content = preg_replace('/<title>(.+?)<\/title>/', '', $content);
 | |
| 	$content = preg_replace('/<category>(.+?)<\/category>/', '', $content);
 | |
| 	
 | |
| 	// Converts lone & characters into & (a.k.a. &)
 | |
| 	$content = preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&$1', $content);
 | |
| 	
 | |
| 	// Fix Word pasting
 | |
| 	$content = strtr($content, $wp_htmltranswinuni);
 | |
| 	
 | |
| 	// Just a little XHTML help
 | |
| 	$content = str_replace('<br>', '<br />', $content);
 | |
| 	$content = str_replace('<hr>', '<hr />', $content);
 | |
| 	
 | |
| 	return $content;
 | |
| }
 | |
| 
 | |
| function funky_javascript_fix($text) {
 | |
| 	// Fixes for browsers' javascript bugs
 | |
| 	global $is_macIE, $is_winIE;
 | |
| 	
 | |
| 	if ($is_winIE || $is_macIE)
 | |
| 		$text = preg_replace("/\%u([0-9A-F]{4,4})/e", "'&#'.base_convert('\\1',16,10).';'", $text);
 | |
| 	
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * balanceTags
 | |
|  *
 | |
|  * Balances Tags of string using a modified stack.
 | |
|  *
 | |
|  * @param text Text to be balanced
 | |
|  * @return Returns balanced text
 | |
|  * @author Leonard Lin (leonard@acm.org)
 | |
|  * @version v1.1
 | |
|  * @date November 4, 2001
 | |
|  * @license GPL v2.0
 | |
|  * @notes
 | |
|  * @changelog
 | |
|  * --- Modified by Scott Reilly (coffee2code) 02 Aug 2004
 | |
|  * 1.2 ***TODO*** Make better - change loop condition to $text
 | |
|  * 1.1 Fixed handling of append/stack pop order of end text
 | |
|  * Added Cleaning Hooks
 | |
|  * 1.0 First Version
 | |
|  */
 | |
| function balanceTags($text, $is_comment = 0) {
 | |
| 	
 | |
| 	/*
 | |
| 	 * if (get_settings('use_balanceTags') == 0) {
 | |
| 	 * return $text;
 | |
| 	 * }
 | |
| 	 */
 | |
| 	$tagstack = array();
 | |
| 	$stacksize = 0;
 | |
| 	$tagqueue = '';
 | |
| 	$newtext = '';
 | |
| 	
 | |
| 	// WP bug fix for comments - in case you REALLY meant to type '< !--'
 | |
| 	$text = str_replace('< !--', '<    !--', $text);
 | |
| 	// WP bug fix for LOVE <3 (and other situations with '<' before a number)
 | |
| 	$text = preg_replace('#<([0-9]{1})#', '<$1', $text);
 | |
| 	
 | |
| 	while (preg_match("/<(\/?\w*)\s*([^>]*)>/", $text, $regex)) {
 | |
| 		$newtext .= $tagqueue;
 | |
| 		
 | |
| 		$i = strpos($text, $regex [0]);
 | |
| 		$l = strlen($regex [0]);
 | |
| 		
 | |
| 		// clear the shifter
 | |
| 		$tagqueue = '';
 | |
| 		// Pop or Push
 | |
| 		if ($regex [1] [0] == "/") { // End Tag
 | |
| 			$tag = strtolower(substr($regex [1], 1));
 | |
| 			// if too many closing tags
 | |
| 			if ($stacksize <= 0) {
 | |
| 				$tag = '';
 | |
| 				// or close to be safe $tag = '/' . $tag;
 | |
| 			} // if stacktop value = tag close value then pop
 | |
| 			else if ($tagstack [$stacksize - 1] == $tag) { // found closing tag
 | |
| 				$tag = '</' . $tag . '>'; // Close Tag
 | |
| 				                          // Pop
 | |
| 				array_pop($tagstack);
 | |
| 				$stacksize--;
 | |
| 			} else { // closing tag not at top, search for it
 | |
| 				for($j = $stacksize - 1; $j >= 0; $j--) {
 | |
| 					if ($tagstack [$j] == $tag) {
 | |
| 						// add tag to tagqueue
 | |
| 						for($k = $stacksize - 1; $k >= $j; $k--) {
 | |
| 							$tagqueue .= '</' . array_pop($tagstack) . '>';
 | |
| 							$stacksize--;
 | |
| 						}
 | |
| 						break;
 | |
| 					}
 | |
| 				}
 | |
| 				$tag = '';
 | |
| 			}
 | |
| 		} else { // Begin Tag
 | |
| 			$tag = strtolower($regex [1]);
 | |
| 			
 | |
| 			// Tag Cleaning
 | |
| 			
 | |
| 			// If self-closing or '', don't do anything.
 | |
| 			if ((substr($regex [2], -1) == '/') || ($tag == '')) {
 | |
| 			} // ElseIf it's a known single-entity tag but it doesn't close itself, do so
 | |
| 			elseif ($tag == 'br' || $tag == 'img' || $tag == 'hr' || $tag == 'input') {
 | |
| 				$regex [2] .= '/';
 | |
| 			} else { // Push the tag onto the stack
 | |
| 			         // If the top of the stack is the same as the tag we want to push, close previous tag
 | |
| 				if (($stacksize > 0) && ($tag != 'div') && ($tagstack [$stacksize - 1] == $tag)) {
 | |
| 					$tagqueue = '</' . array_pop($tagstack) . '>';
 | |
| 					$stacksize--;
 | |
| 				}
 | |
| 				$stacksize = array_push($tagstack, $tag);
 | |
| 			}
 | |
| 			
 | |
| 			// Attributes
 | |
| 			$attributes = $regex [2];
 | |
| 			if ($attributes) {
 | |
| 				$attributes = ' ' . $attributes;
 | |
| 			}
 | |
| 			$tag = '<' . $tag . $attributes . '>';
 | |
| 			// If already queuing a close tag, then put this tag on, too
 | |
| 			if ($tagqueue) {
 | |
| 				$tagqueue .= $tag;
 | |
| 				$tag = '';
 | |
| 			}
 | |
| 		}
 | |
| 		$newtext .= substr($text, 0, $i) . $tag;
 | |
| 		$text = substr($text, $i + $l);
 | |
| 	}
 | |
| 	
 | |
| 	// Clear Tag Queue
 | |
| 	$newtext .= $tagqueue;
 | |
| 	
 | |
| 	// Add Remaining text
 | |
| 	$newtext .= $text;
 | |
| 	
 | |
| 	// Empty Stack
 | |
| 	while ($x = array_pop($tagstack)) {
 | |
| 		$newtext .= '</' . $x . '>'; // Add remaining tags to close
 | |
| 	}
 | |
| 	
 | |
| 	// WP fix for the bug with HTML comments
 | |
| 	$newtext = str_replace("< !--", "<!--", $newtext);
 | |
| 	$newtext = str_replace("<    !--", "< !--", $newtext);
 | |
| 	
 | |
| 	return $newtext;
 | |
| }
 | |
| 
 | |
| function format_to_edit($content) {
 | |
| 	$content = apply_filters('format_to_edit', $content);
 | |
| 	$content = htmlspecialchars($content);
 | |
| 	return $content;
 | |
| }
 | |
| 
 | |
| function format_to_post($content) {
 | |
| 	global $wpdb;
 | |
| 	$content = apply_filters('format_to_post', $content);
 | |
| 	return $content;
 | |
| }
 | |
| 
 | |
| function zeroise($number, $threshold) { // function to add leading zeros when necessary
 | |
| 	return sprintf('%0' . $threshold . 's', $number);
 | |
| }
 | |
| 
 | |
| function backslashit($string) {
 | |
| 	$string = preg_replace('/([a-z])/i', '\\\\\1', $string);
 | |
| 	return $string;
 | |
| }
 | |
| 
 | |
| function trailingslashit($string) {
 | |
| 	if ('/' != substr($string, -1)) {
 | |
| 		$string .= '/';
 | |
| 	}
 | |
| 	return $string;
 | |
| }
 | |
| 
 | |
| function addslashes_gpc($gpc) {
 | |
| 	if (!get_magic_quotes_gpc()) {
 | |
| 		$gpc = addslashes($gpc);
 | |
| 	}
 | |
| 	return $gpc;
 | |
| }
 | |
| 
 | |
| function antispambot($emailaddy, $mailto = 0) {
 | |
| 	$emailNOSPAMaddy = '';
 | |
| 	srand((float) microtime() * 1000000);
 | |
| 	for($i = 0; $i < strlen($emailaddy); $i = $i + 1) {
 | |
| 		$j = floor(rand(0, 1 + $mailto));
 | |
| 		if ($j == 0) {
 | |
| 			$emailNOSPAMaddy .= '&#' . ord(substr($emailaddy, $i, 1)) . ';';
 | |
| 		} elseif ($j == 1) {
 | |
| 			$emailNOSPAMaddy .= substr($emailaddy, $i, 1);
 | |
| 		} elseif ($j == 2) {
 | |
| 			$emailNOSPAMaddy .= '%' . zeroise(dechex(ord(substr($emailaddy, $i, 1))), 2);
 | |
| 		}
 | |
| 	}
 | |
| 	$emailNOSPAMaddy = str_replace('@', '@', $emailNOSPAMaddy);
 | |
| 	return $emailNOSPAMaddy;
 | |
| }
 | |
| 
 | |
| function make_clickable($ret) {
 | |
| 	$ret = ' ' . $ret . ' ';
 | |
| 	$ret = preg_replace("#([\s>])(https?)://([^\s<>{}()]+[^\s.,<>{}()])#i", "$1<a href='$2://$3' rel='nofollow'>$2://$3</a>", $ret);
 | |
| 	$ret = preg_replace("#(\s)www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[^ <>{}()\n\r]*[^., <>{}()\n\r]?)?)#i", "$1<a href='http://www.$2.$3$4' rel='nofollow'>www.$2.$3$4</a>", $ret);
 | |
| 	$ret = preg_replace("#(\s)([a-z0-9\-_.]+)@([^,< \n\r]+)#i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $ret);
 | |
| 	$ret = trim($ret);
 | |
| 	return $ret;
 | |
| }
 | |
| 
 | |
| function wp_rel_nofollow($text) {
 | |
| 	$text = preg_replace('|<a (.+?)>|i', '<a $1 rel="nofollow">', $text);
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * function convert_smilies($text) {
 | |
|  * global $wp_smiliessearch, $wp_smiliesreplace;
 | |
|  * $output = '';
 | |
|  * if (get_settings('use_smilies')) {
 | |
|  * // HTML loop taken from texturize function, could possible be consolidated
 | |
|  * $textarr = preg_split("/(<.*>)/U", $text, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between
 | |
|  * $stop = count($textarr);// loop stuff
 | |
|  * for ($i = 0; $i < $stop; $i++) {
 | |
|  * $content = $textarr[$i];
 | |
|  * if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag
 | |
|  * $content = str_replace($wp_smiliessearch, $wp_smiliesreplace, $content);
 | |
|  * }
 | |
|  * $output .= $content;
 | |
|  * }
 | |
|  * } else {
 | |
|  * // return default text.
 | |
|  * $output = $text;
 | |
|  * }
 | |
|  * return $output;
 | |
|  * }
 | |
|  */
 | |
| function is_email($user_email) {
 | |
| 	$chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i";
 | |
| 	if (strstr($user_email, '@') && strstr($user_email, '.')) {
 | |
| 		if (preg_match($chars, $user_email)) {
 | |
| 			return true;
 | |
| 		} else {
 | |
| 			return false;
 | |
| 		}
 | |
| 	} else {
 | |
| 		return false;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function strip_all_but_one_link($text, $mylink) {
 | |
| 	$match_link = '#(<a.+?href.+?' . '>)(.+?)(</a>)#';
 | |
| 	preg_match_all($match_link, $text, $matches);
 | |
| 	$count = count($matches [0]);
 | |
| 	for($i = 0; $i < $count; $i++) {
 | |
| 		if (!strstr($matches [0] [$i], $mylink)) {
 | |
| 			$text = str_replace($matches [0] [$i], $matches [2] [$i], $text);
 | |
| 		}
 | |
| 	}
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| // used by wp-mail to handle charsets in email subjects
 | |
| function wp_iso_descrambler($string) {
 | |
| 	/* this may only work with iso-8859-1, I'm afraid */
 | |
| 	if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) {
 | |
| 		return $string;
 | |
| 	} else {
 | |
| 		$subject = str_replace('_', ' ', $matches [2]);
 | |
| 		$subject = preg_replace('#\=([0-9a-f]{2})#ei', "chr(hexdec(strtolower('$1')))", $subject);
 | |
| 		return $subject;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // give it a date, it will give you the same date as GMT
 | |
| function get_gmt_from_date($string) {
 | |
| 	// note: this only substracts $time_difference from the given date
 | |
| 	preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches);
 | |
| 	$string_time = gmmktime($matches [4], $matches [5], $matches [6], $matches [2], $matches [3], $matches [1]);
 | |
| 	$string_gmt = gmdate('Y-m-d H:i:s', $string_time - get_settings('gmt_offset') * 3600);
 | |
| 	return $string_gmt;
 | |
| }
 | |
| 
 | |
| // give it a GMT date, it will give you the same date with $time_difference added
 | |
| function get_date_from_gmt($string) {
 | |
| 	// note: this only adds $time_difference to the given date
 | |
| 	preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches);
 | |
| 	$string_time = gmmktime($matches [4], $matches [5], $matches [6], $matches [2], $matches [3], $matches [1]);
 | |
| 	$string_localtime = gmdate('Y-m-d H:i:s', $string_time + get_settings('gmt_offset') * 3600);
 | |
| 	return $string_localtime;
 | |
| }
 | |
| 
 | |
| // computes an offset in seconds from an iso8601 timezone
 | |
| function iso8601_timezone_to_offset($timezone) {
 | |
| 	// $timezone is either 'Z' or '[+|-]hhmm'
 | |
| 	if ($timezone == 'Z') {
 | |
| 		$offset = 0;
 | |
| 	} else {
 | |
| 		$sign = (substr($timezone, 0, 1) == '+') ? 1 : -1;
 | |
| 		$hours = intval(substr($timezone, 1, 2));
 | |
| 		$minutes = intval(substr($timezone, 3, 4)) / 60;
 | |
| 		$offset = $sign * 3600 * ($hours + $minutes);
 | |
| 	}
 | |
| 	return $offset;
 | |
| }
 | |
| 
 | |
| // converts an iso8601 date to MySQL DateTime format used by post_date[_gmt]
 | |
| function iso8601_to_datetime($date_string, $timezone = USER) {
 | |
| 	if ($timezone == GMT) {
 | |
| 		preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits);
 | |
| 		if (!empty($date_bits [7])) { // we have a timezone, so let's compute an offset
 | |
| 			$offset = iso8601_timezone_to_offset($date_bits [7]);
 | |
| 		} else { // we don't have a timezone, so we assume user local timezone (not server's!)
 | |
| 			$offset = 3600 * get_settings('gmt_offset');
 | |
| 		}
 | |
| 		$timestamp = gmmktime($date_bits [4], $date_bits [5], $date_bits [6], $date_bits [2], $date_bits [3], $date_bits [1]);
 | |
| 		$timestamp -= $offset;
 | |
| 		return gmdate('Y-m-d H:i:s', $timestamp);
 | |
| 	} elseif ($timezone == USER) {
 | |
| 		return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function popuplinks($text) {
 | |
| 	// Comment text in popup windows should be filtered through this.
 | |
| 	// Right now it's a moderately dumb function, ideally it would detect whether
 | |
| 	// a target or rel attribute was already there and adjust its actions accordingly.
 | |
| 	$text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text);
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| function sanitize_email($email) {
 | |
| 	return preg_replace('/[^a-z0-9+_.@-]/i', '', $email);
 | |
| }
 | |
| 
 | |
| function human_time_diff($from, $to = '') {
 | |
| 	if (empty($to))
 | |
| 		$to = time();
 | |
| 	$diff = (int) abs($to - $from);
 | |
| 	if ($diff <= 3600) {
 | |
| 		$mins = round($diff / 60);
 | |
| 		if ($mins <= 1)
 | |
| 			$since = __('1 min');
 | |
| 		else
 | |
| 			$since = sprintf(__('%s mins'), $mins);
 | |
| 	} else if (($diff <= 86400) && ($diff > 3600)) {
 | |
| 		$hours = round($diff / 3600);
 | |
| 		if ($hours <= 1)
 | |
| 			$since = __('1 hour');
 | |
| 		else
 | |
| 			$since = sprintf(__('%s hours'), $hours);
 | |
| 	} elseif ($diff >= 86400) {
 | |
| 		$days = round($diff / 86400);
 | |
| 		if ($days <= 1)
 | |
| 			$since = __('1 day');
 | |
| 		else
 | |
| 			$since = sprintf(__('%s days'), $days);
 | |
| 	}
 | |
| 	return $since;
 | |
| }
 | |
| 
 | |
| function wp_trim_excerpt($text) { // Fakes an excerpt if needed
 | |
| 	global $post;
 | |
| 	if ('' == $text) {
 | |
| 		$text = $post->post_content;
 | |
| 		$text = apply_filters('the_content', $text);
 | |
| 		$text = str_replace(']]>', ']]>', $text);
 | |
| 		$text = strip_tags($text);
 | |
| 		$excerpt_length = 55;
 | |
| 		$words = explode(' ', $text, $excerpt_length + 1);
 | |
| 		if (count($words) > $excerpt_length) {
 | |
| 			array_pop($words);
 | |
| 			array_push($words, '[...]');
 | |
| 			$text = implode(' ', $words);
 | |
| 		}
 | |
| 	}
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| function ent2ncr($text) {
 | |
| 	$to_ncr = array(
 | |
| 		'"' => '"',
 | |
| 		'&' => '&',
 | |
| 		'⁄' => '/',
 | |
| 		'<' => '<',
 | |
| 		'>' => '>',
 | |
| 		' ' => ' ',
 | |
| 		'¡' => '¡',
 | |
| 		'¢' => '¢',
 | |
| 		'£' => '£',
 | |
| 		'¤' => '¤',
 | |
| 		'¥' => '¥',
 | |
| 		'|' => '¦',
 | |
| 		'¦' => '¦',
 | |
| 		'&brkbar;' => '¦',
 | |
| 		'§' => '§',
 | |
| 		'¨' => '¨',
 | |
| 		'¨' => '¨',
 | |
| 		'©' => '©',
 | |
| 		'ª' => 'ª',
 | |
| 		'«' => '«',
 | |
| 		'¬' => '¬',
 | |
| 		'­' => '­',
 | |
| 		'®' => '®',
 | |
| 		'¯' => '¯',
 | |
| 		'&hibar;' => '¯',
 | |
| 		'°' => '°',
 | |
| 		'±' => '±',
 | |
| 		'²' => '²',
 | |
| 		'³' => '³',
 | |
| 		'´' => '´',
 | |
| 		'µ' => 'µ',
 | |
| 		'¶' => '¶',
 | |
| 		'·' => '·',
 | |
| 		'¸' => '¸',
 | |
| 		'¹' => '¹',
 | |
| 		'º' => 'º',
 | |
| 		'»' => '»',
 | |
| 		'¼' => '¼',
 | |
| 		'½' => '½',
 | |
| 		'¾' => '¾',
 | |
| 		'¿' => '¿',
 | |
| 		'À' => 'À',
 | |
| 		'Á' => 'Á',
 | |
| 		'Â' => 'Â',
 | |
| 		'Ã' => 'Ã',
 | |
| 		'Ä' => 'Ä',
 | |
| 		'Å' => 'Å',
 | |
| 		'Æ' => 'Æ',
 | |
| 		'Ç' => 'Ç',
 | |
| 		'È' => 'È',
 | |
| 		'É' => 'É',
 | |
| 		'Ê' => 'Ê',
 | |
| 		'Ë' => 'Ë',
 | |
| 		'Ì' => 'Ì',
 | |
| 		'Í' => 'Í',
 | |
| 		'Î' => 'Î',
 | |
| 		'Ï' => 'Ï',
 | |
| 		'Ð' => 'Ð',
 | |
| 		'Ñ' => 'Ñ',
 | |
| 		'Ò' => 'Ò',
 | |
| 		'Ó' => 'Ó',
 | |
| 		'Ô' => 'Ô',
 | |
| 		'Õ' => 'Õ',
 | |
| 		'Ö' => 'Ö',
 | |
| 		'×' => '×',
 | |
| 		'Ø' => 'Ø',
 | |
| 		'Ù' => 'Ù',
 | |
| 		'Ú' => 'Ú',
 | |
| 		'Û' => 'Û',
 | |
| 		'Ü' => 'Ü',
 | |
| 		'Ý' => 'Ý',
 | |
| 		'Þ' => 'Þ',
 | |
| 		'ß' => 'ß',
 | |
| 		'à' => 'à',
 | |
| 		'á' => 'á',
 | |
| 		'â' => 'â',
 | |
| 		'ã' => 'ã',
 | |
| 		'ä' => 'ä',
 | |
| 		'å' => 'å',
 | |
| 		'æ' => 'æ',
 | |
| 		'ç' => 'ç',
 | |
| 		'è' => 'è',
 | |
| 		'é' => 'é',
 | |
| 		'ê' => 'ê',
 | |
| 		'ë' => 'ë',
 | |
| 		'ì' => 'ì',
 | |
| 		'í' => 'í',
 | |
| 		'î' => 'î',
 | |
| 		'ï' => 'ï',
 | |
| 		'ð' => 'ð',
 | |
| 		'ñ' => 'ñ',
 | |
| 		'ò' => 'ò',
 | |
| 		'ó' => 'ó',
 | |
| 		'ô' => 'ô',
 | |
| 		'õ' => 'õ',
 | |
| 		'ö' => 'ö',
 | |
| 		'÷' => '÷',
 | |
| 		'ø' => 'ø',
 | |
| 		'ù' => 'ù',
 | |
| 		'ú' => 'ú',
 | |
| 		'û' => 'û',
 | |
| 		'ü' => 'ü',
 | |
| 		'ý' => 'ý',
 | |
| 		'þ' => 'þ',
 | |
| 		'ÿ' => 'ÿ',
 | |
| 		'Œ' => 'Œ',
 | |
| 		'œ' => 'œ',
 | |
| 		'Š' => 'Š',
 | |
| 		'š' => 'š',
 | |
| 		'Ÿ' => 'Ÿ',
 | |
| 		'ƒ' => 'ƒ',
 | |
| 		'ˆ' => 'ˆ',
 | |
| 		'˜' => '˜',
 | |
| 		'Α' => 'Α',
 | |
| 		'Β' => 'Β',
 | |
| 		'Γ' => 'Γ',
 | |
| 		'Δ' => 'Δ',
 | |
| 		'Ε' => 'Ε',
 | |
| 		'Ζ' => 'Ζ',
 | |
| 		'Η' => 'Η',
 | |
| 		'Θ' => 'Θ',
 | |
| 		'Ι' => 'Ι',
 | |
| 		'Κ' => 'Κ',
 | |
| 		'Λ' => 'Λ',
 | |
| 		'Μ' => 'Μ',
 | |
| 		'Ν' => 'Ν',
 | |
| 		'Ξ' => 'Ξ',
 | |
| 		'Ο' => 'Ο',
 | |
| 		'Π' => 'Π',
 | |
| 		'Ρ' => 'Ρ',
 | |
| 		'Σ' => 'Σ',
 | |
| 		'Τ' => 'Τ',
 | |
| 		'Υ' => 'Υ',
 | |
| 		'Φ' => 'Φ',
 | |
| 		'Χ' => 'Χ',
 | |
| 		'Ψ' => 'Ψ',
 | |
| 		'Ω' => 'Ω',
 | |
| 		'α' => 'α',
 | |
| 		'β' => 'β',
 | |
| 		'γ' => 'γ',
 | |
| 		'δ' => 'δ',
 | |
| 		'ε' => 'ε',
 | |
| 		'ζ' => 'ζ',
 | |
| 		'η' => 'η',
 | |
| 		'θ' => 'θ',
 | |
| 		'ι' => 'ι',
 | |
| 		'κ' => 'κ',
 | |
| 		'λ' => 'λ',
 | |
| 		'μ' => 'μ',
 | |
| 		'ν' => 'ν',
 | |
| 		'ξ' => 'ξ',
 | |
| 		'ο' => 'ο',
 | |
| 		'π' => 'π',
 | |
| 		'ρ' => 'ρ',
 | |
| 		'ς' => 'ς',
 | |
| 		'σ' => 'σ',
 | |
| 		'τ' => 'τ',
 | |
| 		'υ' => 'υ',
 | |
| 		'φ' => 'φ',
 | |
| 		'χ' => 'χ',
 | |
| 		'ψ' => 'ψ',
 | |
| 		'ω' => 'ω',
 | |
| 		'ϑ' => 'ϑ',
 | |
| 		'ϒ' => 'ϒ',
 | |
| 		'ϖ' => 'ϖ',
 | |
| 		' ' => ' ',
 | |
| 		' ' => ' ',
 | |
| 		' ' => ' ',
 | |
| 		'‌' => '‌',
 | |
| 		'‍' => '‍',
 | |
| 		'‎' => '‎',
 | |
| 		'‏' => '‏',
 | |
| 		'–' => '–',
 | |
| 		'—' => '—',
 | |
| 		'‘' => '‘',
 | |
| 		'’' => '’',
 | |
| 		'‚' => '‚',
 | |
| 		'“' => '“',
 | |
| 		'”' => '”',
 | |
| 		'„' => '„',
 | |
| 		'†' => '†',
 | |
| 		'‡' => '‡',
 | |
| 		'•' => '•',
 | |
| 		'…' => '…',
 | |
| 		'‰' => '‰',
 | |
| 		'′' => '′',
 | |
| 		'″' => '″',
 | |
| 		'‹' => '‹',
 | |
| 		'›' => '›',
 | |
| 		'‾' => '‾',
 | |
| 		'⁄' => '⁄',
 | |
| 		'€' => '€',
 | |
| 		'ℑ' => 'ℑ',
 | |
| 		'℘' => '℘',
 | |
| 		'ℜ' => 'ℜ',
 | |
| 		'™' => '™',
 | |
| 		'ℵ' => 'ℵ',
 | |
| 		'↵' => '↵',
 | |
| 		'⇐' => '⇐',
 | |
| 		'⇑' => '⇑',
 | |
| 		'⇒' => '⇒',
 | |
| 		'⇓' => '⇓',
 | |
| 		'⇔' => '⇔',
 | |
| 		'∀' => '∀',
 | |
| 		'∂' => '∂',
 | |
| 		'∃' => '∃',
 | |
| 		'∅' => '∅',
 | |
| 		'∇' => '∇',
 | |
| 		'∈' => '∈',
 | |
| 		'∉' => '∉',
 | |
| 		'∋' => '∋',
 | |
| 		'∏' => '∏',
 | |
| 		'∑' => '∑',
 | |
| 		'−' => '−',
 | |
| 		'∗' => '∗',
 | |
| 		'√' => '√',
 | |
| 		'∝' => '∝',
 | |
| 		'∞' => '∞',
 | |
| 		'∠' => '∠',
 | |
| 		'∧' => '∧',
 | |
| 		'∨' => '∨',
 | |
| 		'∩' => '∩',
 | |
| 		'∪' => '∪',
 | |
| 		'∫' => '∫',
 | |
| 		'∴' => '∴',
 | |
| 		'∼' => '∼',
 | |
| 		'≅' => '≅',
 | |
| 		'≈' => '≈',
 | |
| 		'≠' => '≠',
 | |
| 		'≡' => '≡',
 | |
| 		'≤' => '≤',
 | |
| 		'≥' => '≥',
 | |
| 		'⊂' => '⊂',
 | |
| 		'⊃' => '⊃',
 | |
| 		'⊄' => '⊄',
 | |
| 		'⊆' => '⊆',
 | |
| 		'⊇' => '⊇',
 | |
| 		'⊕' => '⊕',
 | |
| 		'⊗' => '⊗',
 | |
| 		'⊥' => '⊥',
 | |
| 		'⋅' => '⋅',
 | |
| 		'⌈' => '⌈',
 | |
| 		'⌉' => '⌉',
 | |
| 		'⌊' => '⌊',
 | |
| 		'⌋' => '⌋',
 | |
| 		'⟨' => '〈',
 | |
| 		'⟩' => '〉',
 | |
| 		'←' => '←',
 | |
| 		'↑' => '↑',
 | |
| 		'→' => '→',
 | |
| 		'↓' => '↓',
 | |
| 		'↔' => '↔',
 | |
| 		'◊' => '◊',
 | |
| 		'♠' => '♠',
 | |
| 		'♣' => '♣',
 | |
| 		'♥' => '♥',
 | |
| 		'♦' => '♦'
 | |
| 	);
 | |
| 	
 | |
| 	foreach ($to_ncr as $entity => $ncr) {
 | |
| 		$text = str_replace($entity, $ncr, $text);
 | |
| 	}
 | |
| 	return $text;
 | |
| }
 | |
| 
 | |
| ?>
 | 
