Subversion Repositories php_utils

Rev

Rev 39 | Rev 55 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. /*
  4.  * PHP Utilities - Misc functions
  5.  * Copyright 2019 - 2022 Daniel Marschall, ViaThinkSoft
  6.  *
  7.  * Licensed under the Apache License, Version 2.0 (the "License");
  8.  * you may not use this file except in compliance with the License.
  9.  * You may obtain a copy of the License at
  10.  *
  11.  *     http://www.apache.org/licenses/LICENSE-2.0
  12.  *
  13.  * Unless required by applicable law or agreed to in writing, software
  14.  * distributed under the License is distributed on an "AS IS" BASIS,
  15.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16.  * See the License for the specific language governing permissions and
  17.  * limitations under the License.
  18.  */
  19.  
  20. // array(89,51,10,10) => 'Y3\012\012'
  21. function c_literal($byte_array) {
  22.         $out = "'";
  23.         foreach ($byte_array as $c) {
  24.                 if (is_string($c)) $c = ord($c);
  25.                 if ((($c >= 0x00) && ($c <= 0x1F)) || ($c >= 0x7F)) {
  26.                         // For non-printable characters use octal notation:
  27.                         // \000 ... \377
  28.                         $out .= "\\".str_pad(base_convert(''.$c,10,8), 3, '0', STR_PAD_LEFT);
  29.                 } else {
  30.                         if (chr($c) == "'") $out .= '\\';
  31.                         $out .= chr($c);
  32.                 }
  33.         }
  34.         $out .= "'";
  35.         return $out;
  36. }
  37.  
  38. function c_literal_hexstr($hexstr) {
  39.         $odd_char = (strlen($hexstr)%2 != 0) ? '0x'.substr($hexstr,-1).'<<4' : '';
  40.         $hexstr = substr($hexstr,0,2*(int)floor(strlen($hexstr)/2));
  41.         if ($hexstr != '') {
  42.                 $ary = str_split(hex2bin($hexstr));
  43.                 foreach ($ary as &$a) $a = ord($a);
  44.                 return rtrim(c_literal($ary).' '.$odd_char);
  45.         } else {
  46.                 return $odd_char;
  47.         }
  48. }
  49.  
  50. function generateRandomString($length) {
  51.         // Note: This function can be used in temporary file names, so you
  52.         // may not generate illegal file name characters.
  53.         $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  54.         $charactersLength = strlen($characters);
  55.         $randomString = '';
  56.         for ($i = 0; $i < $length; $i++) {
  57.                 $randomString .= $characters[rand(0, $charactersLength - 1)];
  58.         }
  59.         return $randomString;
  60. }
  61.  
  62. function trim_br($html) {
  63.         $count = 0;
  64.         do { $html = preg_replace('@^\s*<\s*br\s*/{0,1}\s*>@isU', '', $html, -1, $count); } while ($count > 0); // left trim
  65.         do { $html = preg_replace('@<\s*br\s*/{0,1}\s*>\s*$@isU', '', $html, -1, $count); } while ($count > 0); // right trim
  66.         return $html;
  67. }
  68.  
  69. function insertWhitespace($str, $index) {
  70.         return substr($str, 0, $index) . ' ' . substr($str, $index);
  71. }
  72.  
  73. function js_escape($data) {
  74.         // TODO.... json_encode??
  75.         $data = str_replace('\\', '\\\\', $data);
  76.         $data = str_replace('\'', '\\\'', $data);
  77.         return "'" . $data . "'";
  78. }
  79.  
  80. function get_calling_function() {
  81.         $ex = new Exception();
  82.         $trace = $ex->getTrace();
  83.         if (!isset($trace[2])) return '(main)';
  84.         $final_call = $trace[2];
  85.         return $final_call['file'].':'.$final_call['line'].'/'.$final_call['function'].'()';
  86. }
  87.  
  88. function convert_to_utf8_no_bom($cont) {
  89.         $cont = vts_utf8_encode($cont);
  90.  
  91.         // Remove BOM
  92.         $bom = pack('H*','EFBBBF');
  93.         $cont = preg_replace("/^$bom/", '', $cont);
  94.         return $cont;
  95. }
  96.  
  97. function vts_utf8_encode($text) {
  98.         $enc = mb_detect_encoding($text, null, true);
  99.         if ($enc === false) $enc = mb_detect_encoding($text, ['ASCII', 'UTF-8', 'Windows-1252', 'ISO-8859-1'], true);
  100.         if ($enc === false) $enc = null;
  101.  
  102.         if ($enc === 'UTF-8') return $text;
  103.  
  104.         $res = mb_convert_encoding($text, 'UTF-8', $enc);
  105.         if ($res === false) $res = iconv('UTF-8', 'UTF-8//IGNORE', $text);
  106.  
  107.         return $res;
  108. }
  109.  
  110. function stripHtmlComments($html) {
  111.         // https://stackoverflow.com/questions/11337332/how-to-remove-html-comments-in-php
  112.         $html = preg_replace("~<!--(?!<!)[^\[>].*?-->~s", "", $html);
  113.         return $html;
  114. }
  115.  
  116. function wildcard_is_dir($dir) {
  117.         // Example usage:  if (!wildcard_is_dir(OIDplus::localpath().'plugins/'.'*'.'/design/'.$value)) throw new Exception("Design does not exist")
  118.         $dirs = @glob($dir);
  119.         if ($dirs) foreach ($dirs as $dir) {
  120.                 if (is_dir($dir)) return true;
  121.         }
  122.         return false;
  123. }
  124.  
  125. function isInternetExplorer() {
  126.         // see also includes/oidplus_base.js
  127.         $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
  128.         return ((strpos($ua,'MSIE ') !== false) || (strpos($ua,'Trident/') !== false));
  129. }
  130.