Ignore:
Timestamp:
May 4, 2020 2:25:31 AM (4 years ago)
Author:
anonymous
Message:

Use the /u regex modifier only when using UTF-8. Disable indexed array key removal from URL query args.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Utilities.inc.php

    r723 r724  
    118118function getDump($var, $serialize=false)
    119119{
     120    $app =& App::getInstance();
     121
    120122    ob_start();
    121123    print_r($var);
    122124    $d = ob_get_contents();
    123125    ob_end_clean();
    124     return $serialize ? preg_replace('/\s+/mu', ' ', $d) : $d;
     126    return $serialize ? preg_replace('/\s+/m' . $app->getParam('preg_u'), ' ', $d) : $d;
    125127}
    126128
     
    140142function fancyDump($var, $indent='- ', $depth=1)
    141143{
     144    $app =& App::getInstance();
     145
    142146    $indent_str = str_repeat($indent, $depth);
    143147    $output = '';
     
    154158        $output .= sprintf("%s%s\n", $indent_str, $var);
    155159    }
    156     return preg_replace(['/^[ \t]+$/u', '/\n\n+/u', '/^(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(\S )/mu'], ['', "\n", '$1$1$2$2$3$3$4$4$5$5$6$6$7$7$8$8$9'], $output);
     160    return preg_replace(['/^[ \t]+$/' . $app->getParam('preg_u'), '/\n\n+/' . $app->getParam('preg_u'), '/^(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(?:\S( ))?(\S )/m' . $app->getParam('preg_u')], ['', "\n", '$1$1$2$2$3$3$4$4$5$5$6$6$7$7$8$8$9'], $output);
    157161}
    158162
     
    330334function highlightWords($text, $search, $class='sc-highlightwords')
    331335{
     336    $app =& App::getInstance();
     337
    332338    $words = preg_split('/[^\w]/', $search, -1, PREG_SPLIT_NO_EMPTY);
    333339
     
    337343    foreach ($words as $w) {
    338344        if ('' != trim($w)) {
    339             $search[] = '/\b(' . preg_quote($w) . ')\b/iu';
     345            $search[] = '/\b(' . preg_quote($w) . ')\b/i' . $app->getParam('preg_u');
    340346            $replace[] = '<span class="' . $class . '">$1</span>';
    341347        }
     
    414420function encodeEmail($email, $at=' at ', $dot=' dot ')
    415421{
    416     $search = array('/@/u', '/\./u');
     422    $app =& App::getInstance();
     423
     424    $search = array('/@/' . $app->getParam('preg_u'), '/\./' . $app->getParam('preg_u'));
    417425    $replace = array($at, $dot);
    418426    return preg_replace($search, $replace, $email);
     
    438446function truncate($str, $len=50, $where='end', $delim='
')
    439447{
     448    $app =& App::getInstance();
     449
    440450    $dlen = mb_strlen($delim);
    441451    if ($len <= $dlen || mb_strlen($str) <= $dlen) {
     
    453463    switch ($where) {
    454464    case 'start' :
    455         return preg_replace(array(sprintf('/^.{%s,}(.{%s})$/su', $dlen + 1, $part1 + $part2), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array($delim . '$1', $delim), $str);
     465        return preg_replace(array(sprintf('/^.{%s,}(.{%s})$/s' . $app->getParam('preg_u'), $dlen + 1, $part1 + $part2), sprintf('/\s*%s{%s,}\s*/s' . $app->getParam('preg_u'), preg_quote($delim), $dlen)), array($delim . '$1', $delim), $str);
    456466
    457467    case 'middle' :
    458         return preg_replace(array(sprintf('/^(.{%s}).{%s,}(.{%s})$/su', $part1, $dlen + 1, $part2), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array('$1' . $delim . '$2', $delim), $str);
     468        return preg_replace(array(sprintf('/^(.{%s}).{%s,}(.{%s})$/s' . $app->getParam('preg_u'), $part1, $dlen + 1, $part2), sprintf('/\s*%s{%s,}\s*/s' . $app->getParam('preg_u'), preg_quote($delim), $dlen)), array('$1' . $delim . '$2', $delim), $str);
    459469
    460470    case 'end' :
    461471    default :
    462         return preg_replace(array(sprintf('/^(.{%s}).{%s,}$/su', $part1 + $part2, $dlen + 1), sprintf('/\s*%s{%s,}\s*/su', preg_quote($delim), $dlen)), array('$1' . $delim, $delim), $str);
     472        return preg_replace(array(sprintf('/^(.{%s}).{%s,}$/s' . $app->getParam('preg_u'), $part1 + $part2, $dlen + 1), sprintf('/\s*%s{%s,}\s*/s' . $app->getParam('preg_u'), preg_quote($delim), $dlen)), array('$1' . $delim, $delim), $str);
    463473    }
    464474}
     
    620630
    621631    return preg_replace([
    622         '/&amp;(?=[\w\d#]{1,10};)/ui',
    623         '/&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);/ui',
    624         '/&(?:ndash|mdash|horbar);/ui',
    625         '/&(?:nbsp);/ui',
    626         '/&(?:bdquo|ldquo|ldquor|lsquo|lsquor|rdquo|rdquor|rsquo|rsquor|sbquo|lsaquo|rsaquo);/ui',
    627         '/&(?:amp);/ui', // This replacement must come after matching all other entities.
    628         '/[&;]+/u',
     632        '/&amp;(?=[\w\d#]{1,10};)/i' . $app->getParam('preg_u'),
     633        '/&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);/i' . $app->getParam('preg_u'),
     634        '/&(?:ndash|mdash|horbar);/i' . $app->getParam('preg_u'),
     635        '/&(?:nbsp);/i' . $app->getParam('preg_u'),
     636        '/&(?:bdquo|ldquo|ldquor|lsquo|lsquor|rdquo|rdquor|rsquo|rsquor|sbquo|lsaquo|rsaquo);/i' . $app->getParam('preg_u'),
     637        '/&(?:amp);/i' . $app->getParam('preg_u'), // This replacement must come after matching all other entities.
     638        '/[&;]+/' . $app->getParam('preg_u'),
    629639    ], [
    630640        '&',
     
    650660function URLSlug($str)
    651661{
    652     return strtolower(urlencode(preg_replace(['/[-\s–—.:;?!@#=+_\/\\\]+|(?:&nbsp;|&#160;|&ndash;|&#8211;|&mdash;|&#8212;|%c2%a0|%e2%80%93|%e2%80%9)+/u', '/-+/u', '/[^\w-]+/u', '/^-+|-+$/u'], ['-', '-', '', ''], simplifyAccents($str))));
     662    $app =& App::getInstance();
     663
     664    return strtolower(urlencode(preg_replace(['/[-\s–—.:;?!@#=+_\/\\\]+|(?:&nbsp;|&#160;|&ndash;|&#8211;|&mdash;|&#8212;|%c2%a0|%e2%80%93|%e2%80%9)+/' . $app->getParam('preg_u'), '/-+/' . $app->getParam('preg_u'), '/[^\w-]+/' . $app->getParam('preg_u'), '/^-+|-+$/' . $app->getParam('preg_u')], ['-', '-', '', ''], simplifyAccents($str))));
    653665}
    654666
     
    664676    $app =& App::getInstance();
    665677
    666     $file_name = preg_replace(['/[^a-zA-Z0-9()@._=+-]+/u', '/^_+|_+$/u'], ['_', ''], simplifyAccents($file_name));
     678    $file_name = preg_replace(['/[^a-zA-Z0-9()@._=+-]+/' . $app->getParam('preg_u'), '/^_+|_+$/' . $app->getParam('preg_u')], ['_', ''], simplifyAccents($file_name));
    667679    return mb_substr($file_name, 0, 250);
    668680}
     
    11821194function hash64($string, $length=18)
    11831195{
    1184     return mb_substr(preg_replace('/[^\w]/u', '', base64_encode(hash('sha512', $string, true))), 0, $length);
     1196    $app =& App::getInstance();
     1197
     1198    return mb_substr(preg_replace('/[^\w]/' . $app->getParam('preg_u'), '', base64_encode(hash('sha512', $string, true))), 0, $length);
    11851199}
    11861200
     
    12121226    switch ($app->getParam('signing_method')) {
    12131227    case 'sha512+base64':
    1214         return $val . '-' . mb_substr(preg_replace('/[^\w]/u', '', base64_encode(hash('sha512', $val . $salt, true))), 0, $length);
     1228        return $val . '-' . mb_substr(preg_replace('/[^\w]/' . $app->getParam('preg_u'), '', base64_encode(hash('sha512', $val . $salt, true))), 0, $length);
    12151229
    12161230    case 'md5':
     
    14481462function stripQuery($url)
    14491463{
    1450     return preg_replace('/[?#].*$/u', '', $url);
     1464    $app =& App::getInstance();
     1465
     1466    return preg_replace('/[?#].*$/' . $app->getParam('preg_u'), '', $url);
    14511467}
    14521468
     
    14581474function absoluteMe()
    14591475{
    1460     $safe_http_host = preg_replace('/[^a-z\d.:-]/u', '', getenv('HTTP_HOST'));
     1476    $app =& App::getInstance();
     1477
     1478    $safe_http_host = preg_replace('/[^a-z\d.:-]/' . $app->getParam('preg_u'), '', getenv('HTTP_HOST'));
    14611479    return sprintf('%s://%s%s', (getenv('HTTPS') ? 'https' : 'http'), $safe_http_host, getenv('REQUEST_URI'));
    14621480}
Note: See TracChangeset for help on using the changeset viewer.