X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Ffunc.php;h=22c7c754148281b74288bba6e161006840040645;hb=a6cac21c76c2e94d8b90a26a59764b7e0e4cfb81;hp=68b7cc1dbd489bc14695609174481be6ef60325e;hpb=b0032d4c9278210c7ea021f4e74006233357e0b8;p=pukiwiki%2Fpukiwiki.git diff --git a/lib/func.php b/lib/func.php index 68b7cc1..22c7c75 100644 --- a/lib/func.php +++ b/lib/func.php @@ -2,7 +2,7 @@ // 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 // @@ -462,7 +462,7 @@ function arg_check($str) function _pagename_urlencode_callback($matches) { - return rawurlencode($matches[0]); + return urlencode($matches[0]); } function pagename_urlencode($page) @@ -723,9 +723,9 @@ function drop_submit($str) } // 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(); @@ -734,11 +734,12 @@ function get_autolink_pattern(& $pages) 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 { @@ -754,7 +755,7 @@ function get_autolink_pattern(& $pages) 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 '(?!)'; @@ -783,6 +784,52 @@ function get_autolink_pattern_sub(& $pages, $start, $end, $pos) 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 = << # (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 * @@ -992,9 +1039,14 @@ function guess_script_absolute_uri() 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 { @@ -1021,7 +1073,7 @@ function csv_explode($separator, $string) 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; } @@ -1031,7 +1083,7 @@ function csv_explode($separator, $string) // 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)) @@ -1048,6 +1100,21 @@ function htmlsc($string = '', $flags = ENT_COMPAT, $charset = CONTENT_CHARSET) } /** + * 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. @@ -1097,6 +1164,22 @@ function manage_page_redirect() { 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