use multibyte functions
authorChristian Weiske <cweiske@cweiske.de>
Sun, 11 Aug 2013 20:05:36 +0000 (22:05 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sun, 11 Aug 2013 20:05:36 +0000 (22:05 +0200)
src/callnotifier/Functions.php [new file with mode: 0644]
src/callnotifier/Logger/CallFileTop.php

diff --git a/src/callnotifier/Functions.php b/src/callnotifier/Functions.php
new file mode 100644 (file)
index 0000000..406317f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+namespace callnotifier;
+
+/**
+ * Some helper functions
+ */
+class Functions
+{
+    /**
+     * Multibyte-version of str_pad
+     *
+     * @link http://stackoverflow.com/a/14773638/282601
+     */
+    public static function mb_str_pad(
+        $input, $pad_length, $pad_string = ' ',
+        $pad_type = STR_PAD_RIGHT, $encoding = 'UTF-8'
+    ) {
+        if (!function_exists('mb_substr')) {
+            return str_pad($input, $pad_length, $pad_string, $pad_type);
+        }
+
+        $input_length = mb_strlen($input, $encoding);
+        $pad_string_length = mb_strlen($pad_string, $encoding);
+
+        if ($pad_length <= 0 || ($pad_length - $input_length) <= 0) {
+            return $input;
+        }
+
+        $num_pad_chars = $pad_length - $input_length;
+
+        switch ($pad_type) {
+        case STR_PAD_RIGHT:
+            $left_pad = 0;
+            $right_pad = $num_pad_chars;
+            break;
+
+        case STR_PAD_LEFT:
+            $left_pad = $num_pad_chars;
+            $right_pad = 0;
+            break;
+
+        case STR_PAD_BOTH:
+            $left_pad = floor($num_pad_chars / 2);
+            $right_pad = $num_pad_chars - $left_pad;
+            break;
+        }
+
+        $result = '';
+        for ($i = 0; $i < $left_pad; ++$i) {
+            $result .= mb_substr($pad_string, $i % $pad_string_length, 1, $encoding);
+        }
+        $result .= $input;
+        for ($i = 0; $i < $right_pad; ++$i) {
+            $result .= mb_substr($pad_string, $i % $pad_string_length, 1, $encoding);
+        }
+
+        return $result;
+    }
+}
+?>
index 1412782bd850b6aec130133ce0ad8f927be2cecb..fca02ab3f8ab7c0b5007e74011428a889e64813e 100644 (file)
@@ -99,9 +99,9 @@ class Logger_CallFileTop extends Logger_CallBase
 
         if ($this->callTypes == 'io') {
             $str .= $prefix;
 
         if ($this->callTypes == 'io') {
             $str .= $prefix;
-            $str .= str_pad($numstr, 20);
+            $str .= Functions::mb_str_pad($numstr, 20);
         } else {
         } else {
-            $str .= '  ' . str_pad($numstr, 25);
+            $str .= '  ' . Functions::mb_str_pad($numstr, 25);
         }
 
         $str .= ' ' . date('H:i:s', $call->end - $call->start - 3600);
         }
 
         $str .= ' ' . date('H:i:s', $call->end - $call->start - 3600);