PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/system/functions/string.php

https://code.google.com/
PHP | 183 lines | 142 code | 36 blank | 5 comment | 24 complexity | a8b8f30d6b59f5ed22629f379fe82c7f MD5 | raw file
  1. <?php
  2. function nl2p($string, $line_breaks = true) {
  3. $string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '', $string);
  4. // It is conceivable that people might still want single line-breaks
  5. // without breaking into a new paragraph.
  6. if (!$line_breaks)
  7. return '<p>'.preg_replace(array("/([\r\n]{2,})/i", "/([^>])\r\n([^<])/i"), array("</p>\r\n<p>", '$1<br />$2'), trim($string)).'</p>';
  8. else
  9. return '<p>'.preg_replace(
  10. array("/([\r\n]{2,})/i", "/([\r\n]{3,})/i","/([^>])\r\n([^<])/i"),
  11. array("</p>\r\n<p>", "</p>\r\n<p>", '$1<br />$2'),
  12. trim($string)).'</p>';
  13. }
  14. function str_replace_limit($search, $replace, $string, $limit = 1) {
  15. if (is_bool($pos = (strpos($string, $search))))
  16. return $string;
  17. $search_len = strlen($search);
  18. for ($i = 0; $i < $limit; $i++) {
  19. $string = substr_replace($string, $replace, $pos, $search_len);
  20. if (is_bool($pos = (strpos($string, $search))))
  21. break;
  22. }
  23. return $string;
  24. }
  25. function h($str) {
  26. return htmlspecialchars($str);
  27. }
  28. function u($str) {
  29. return urlencode($str);
  30. }
  31. # Cleans up a string, translating chars, removing non \w ones and converting whitespaces to hyphens.
  32. function str_clean($str) {
  33. return trim(preg_replace(array('~[^\w-]~', '~-{2,}~'), array('', '-'), str_replace(array(' ', '--'), '-', translate_chars(strtolower($str)))), ' -_');
  34. }
  35. function translate_chars($string) {
  36. return strtr($string,
  37. "?ÁÂ?Ä?áâ?ä??ÓÔ?Ö??óô?ö??É?Ë?é?ëÇç?ÍÎ??íî??Ú?Ü?ú?ü???",
  38. "AAAAAAaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"
  39. );
  40. }
  41. function number_to_human_size($bytes){
  42. $size = $bytes / 1024;
  43. if($size < 1024){
  44. $size = number_format($size, 1);
  45. $size .= ' KB';
  46. } else {
  47. if($size / 1024 < 1024){
  48. $size = number_format($size / 1024, 1);
  49. $size .= ' MB';
  50. } else if ($size / 1024 / 1024 < 1024) {
  51. $size = number_format($size / 1024 / 1024, 1);
  52. $size .= ' GB';
  53. }
  54. }
  55. return $size;
  56. }
  57. function to_json($arr) {
  58. $parts = array();
  59. $is_list = true;
  60. if (is_object($arr)) {
  61. $arr = obj2array($arr);
  62. }
  63. $i = 0;
  64. foreach ( $arr as $key => $value ){
  65. if (!is_int($key) || $key != $i){
  66. $is_list = false;
  67. break;
  68. }
  69. $i++;
  70. }
  71. foreach($arr as $key => $value) {
  72. if(is_object($value)) {
  73. if(!empty_obj($value))
  74. $parts[] = to_json((array)$value);
  75. else
  76. $parts[] = "\"$key\":".to_json(array());
  77. } elseif(is_array($value)) {
  78. $parts[] = $is_list ? to_json($value) : '"' . $key . '":' . to_json($value);
  79. } else {
  80. $str = !$is_list ? '"' . $key . '":' : '';
  81. if (is_int($value))
  82. $str .= (int)$value;
  83. elseif ($value === true)
  84. $str .= "true";
  85. elseif ($value === false)
  86. $str .= "false";
  87. elseif ($value === null)
  88. $str .= "null";
  89. elseif (is_string($value)) {
  90. $patt = array("\\", /*'/',*/ '"', "\b", "\t", "\n", "\f", "\r", "\u");
  91. $repl = array("\\\\", /*"\\/",*/ "\\".'"', "\\b", "\\t", "\\n", "\\f", "\\r", "\\u");
  92. $value = str_replace($patt, $repl, $value);
  93. $str .= '"' . $value . '"';
  94. }
  95. $parts[] = $str;
  96. }
  97. }
  98. $json = implode(',', $parts);
  99. $json = utf8_encode($json);
  100. return $is_list ? '[' . $json . ']' : '{' . $json . '}';
  101. // return $is_list && !empty($json) ? '[' . $json . ']' : '{' . $json . '}';
  102. }
  103. function to_xml($arr, $root = null, $opts = array()) {
  104. if (is_object($arr) && !$root)
  105. $root = strtolower(get_class($arr));
  106. $xml = '';
  107. if (empty($opts['skip_instruct']))
  108. $xml .= '<?xml version="1.0" encoding="UTF-8"?>';
  109. $xml .= "<$root ";
  110. $attrs = array();
  111. foreach ($arr as $k => $v) {
  112. if (!is_scalar($v))
  113. continue;
  114. elseif (is_bool($v))
  115. $v = $v ? 'true' : 'false';
  116. $attrs[] = $k . '="' . $v . '"';
  117. }
  118. $xml .= implode(' ', $attrs);
  119. $xml .= " />";
  120. return $xml;
  121. }
  122. function json_error_handler($errno, $errstr, $errfile, $errline){
  123. if (!(error_reporting() & $errno)) {
  124. return;
  125. }
  126. header('Content-type: application/json');
  127. header('HTTP/1.1 500 Internal Server Error');
  128. // # TODO: hardcoded system's folder name.
  129. $errfile = addslashes(str_replace(array('\\', ROOT), array('/', ''), $errfile));
  130. // $errfile = addslashes(preg_replace('~^(.*)\/myimouto~', '', str_replace('\\', '/', $errfile)));
  131. switch ($errno) {
  132. case E_USER_ERROR:
  133. $e = "Fatal: [$errno] $errstr<br />($errfile:$errline)";
  134. break;
  135. case E_USER_WARNING:
  136. $e = "Warning: [$errno] $errstr<br />($errfile:$errline)";
  137. break;
  138. case E_USER_NOTICE:
  139. $e = "Notice: [$errno] $errstr<br />($errfile:$errline)";
  140. break;
  141. default:
  142. $e = "[$errno] $errstr<br />($errfile:$errline)";
  143. break;
  144. }
  145. exit(to_json(array('reason' => $e)));
  146. }
  147. ?>