// PukiWiki - Yet another WikiWikiWeb clone.
// func.php
// Copyright
-// 2002-2018 PukiWiki Development Team
+// 2002-2021 PukiWiki Development Team
// 2001-2002 Originally written by yu-ji
// License: GPL v2 or (at your option) any later version
//
function _pagename_urlencode_callback($matches)
{
- return rawurlencode($matches[0]);
+ return urlencode($matches[0]);
}
function pagename_urlencode($page)
}
// Generate AutoLink patterns (thx to hirofummy)
-function get_autolink_pattern(& $pages)
+function get_autolink_pattern($pages, $min_length)
{
- global $WikiName, $autolink, $nowikiname;
+ global $WikiName, $nowikiname;
$config = new Config('AutoLink');
$config->read();
unset($config);
$auto_pages = array_merge($ignorepages, $forceignorepages);
- foreach ($pages as $page)
+ foreach ($pages as $page) {
if (preg_match('/^' . $WikiName . '$/', $page) ?
- $nowikiname : strlen($page) >= $autolink)
+ $nowikiname : strlen($page) >= $min_length) {
$auto_pages[] = $page;
-
+ }
+ }
if (empty($auto_pages)) {
$result = $result_a = '(?!)';
} else {
return array($result, $result_a, $forceignorepages);
}
-function get_autolink_pattern_sub(& $pages, $start, $end, $pos)
+function get_autolink_pattern_sub($pages, $start, $end, $pos)
{
if ($end == 0) return '(?!)';
return $result;
}
+// Get AutoAlias value
+function get_autoalias_right_link($alias_name)
+{
+ $pairs = get_autoaliases();
+ // A string: Seek the pair
+ if (isset($pairs[$alias_name])) {
+ return $pairs[$alias_name];
+ }
+ return '';
+}
+
+// Load setting pairs from AutoAliasName
+function get_autoaliases()
+{
+ global $aliaspage, $autoalias_max_words;
+ static $pairs;
+ $preg_u = get_preg_u();
+
+ if (! isset($pairs)) {
+ $pairs = array();
+ $pattern = <<<EOD
+\[\[ # open bracket
+((?:(?!\]\]).)+)> # (1) alias name
+((?:(?!\]\]).)+) # (2) alias link
+\]\] # close bracket
+EOD;
+ $postdata = join('', get_source($aliaspage));
+ $matches = array();
+ $count = 0;
+ $max = max($autoalias_max_words, 0);
+ if (preg_match_all('/' . $pattern . '/x' . get_preg_u(), $postdata,
+ $matches, PREG_SET_ORDER)) {
+ foreach($matches as $key => $value) {
+ if ($count == $max) break;
+ $name = trim($value[1]);
+ if (! isset($pairs[$name])) {
+ ++$count;
+ $pairs[$name] = trim($value[2]);
+ }
+ unset($matches[$key]);
+ }
+ }
+ }
+ return $pairs;
+}
+
/**
* Get propery URI of this script
*
function input_filter($param)
{
static $magic_quotes_gpc = NULL;
- if ($magic_quotes_gpc === NULL)
- $magic_quotes_gpc = get_magic_quotes_gpc();
-
+ if ($magic_quotes_gpc === NULL) {
+ if (function_exists('get_magic_quotes_gpc')) {
+ // No 'get_magic_quotes_gpc' function in PHP8
+ $magic_quotes_gpc = get_magic_quotes_gpc();
+ } else {
+ $magic_quotes_gpc = 0;
+ }
+ }
if (is_array($param)) {
return array_map('input_filter', $param);
} else {
foreach ($matches[1] as $str) {
$len = strlen($str);
- if ($len > 1 && $str{0} == '"' && $str{$len - 1} == '"')
+ if ($len > 1 && $str[0] == '"' && $str[$len - 1] == '"')
$str = str_replace('""', '"', substr($str, 1, -1));
$retval[] = $str;
}
// Implode an array with CSV data format (escape double quotes)
function csv_implode($glue, $pieces)
{
- $_glue = ($glue != '') ? '\\' . $glue{0} : '';
+ $_glue = ($glue != '') ? '\\' . $glue[0] : '';
$arr = array();
foreach ($pieces as $str) {
if (preg_match('/[' . '"' . "\n\r" . $_glue . ']/', $str))
}
/**
+ * Get JSON string with htmlspecialchars().
+ */
+function htmlsc_json($obj)
+{
+ // json_encode: PHP 5.2+
+ // JSON_UNESCAPED_UNICODE: PHP 5.4+
+ // JSON_UNESCAPED_SLASHES: PHP 5.4+
+ if (defined('JSON_UNESCAPED_UNICODE')) {
+ return htmlsc(json_encode($obj,
+ JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+ }
+ return '';
+}
+
+/**
* Get redirect page name on Page Redirect Rules
*
* This function returns exactly false if it doesn't need redirection.
return FALSE;
}
+/**
+ * Return 'u' (PCRE_UTF8) if PHP7+ and UTF-8.
+ */
+function get_preg_u() {
+ static $utf8u; // 'u'(PCRE_UTF8) or ''
+ if (! isset($utf8u)) {
+ if (version_compare('7.0.0', PHP_VERSION, '<=')
+ && defined('PKWK_UTF8_ENABLE')) {
+ $utf8u = 'u';
+ } else {
+ $utf8u = '';
+ }
+ }
+ return $utf8u;
+}
+
//// Compat ////
// is_a -- Returns TRUE if the object is of this class or has this class as one of its parents