note 111147 added to function.str-pad

From: Date: Sun, 20 Jan 2013 01:44:46 +0000
Subject: note 111147 added to function.str-pad
Groups: php.notes 
Request: Send a blank email to php-notes+get-193275@lists.php.net to get a copy of this message
A proper unicode string padder; <?php mb_internal_encoding('utf-8'); // @important function str_pad_unicode($str, $pad_len, $pad_str = ' ', $dir = STR_PAD_RIGHT) { $str_len = mb_strlen($str); $pad_str_len = mb_strlen($pad_str); if (!$str_len && ($dir == STR_PAD_RIGHT || $dir == STR_PAD_LEFT)) { $str_len = 1; // @debug } if (!$pad_len || !$pad_str_len || $pad_len <= $str_len) { return $str; } $result = null; $repeat = ceil($str_len - $pad_str_len + $pad_len); if ($dir == STR_PAD_RIGHT) { $result = $str . str_repeat($pad_str, $repeat); $result = mb_substr($result, 0, $pad_len); } else if ($dir == STR_PAD_LEFT) { $result = str_repeat($pad_str, $repeat) . $str; $result = mb_substr($result, -$pad_len); } else if ($dir == STR_PAD_BOTH) { $length = ($pad_len - $str_len) / 2; $repeat = ceil($length / $pad_str_len); $result = mb_substr(str_repeat($pad_str, $repeat), 0, floor($length)) . $str . mb_substr(str_repeat($pad_str, $repeat), 0, ceil($length)); } return $result; } ?> Test; <?php // needs ie. "test.php" file encoded in "utf-8 without bom" $s = '...'; for ($i = 3; $i <= 1000; $i++) { $s1 = str_pad($s, $i, 'AO', STR_PAD_BOTH); // can not inculde unicode char!!! $s2 = str_pad_unicode($s, $i, 'ÄÖ', STR_PAD_BOTH); $sl1 = strlen($s1); $sl2 = mb_strlen($s2); echo "len $sl1: $s1 \n"; echo "len $sl2: $s2 \n"; echo "\n"; if ($sl1 != $sl2) die("Fail!"); } ?> Output; len 3: ... len 3: ... len 4: ...A len 4: ...Ä len 5: A...A len 5: Ä...Ä len 6: A...AO len 6: Ä...ÄÖ ... ---- Server IP: 160.75.25.15 Probable Submitter: 88.253.79.190 ---- Manual Page -- http://php.net/manual/en/function.str-pad.php Edit -- https://master.php.net/note/edit/111147 Del: integrated -- https://master.php.net/note/delete/111147/integrated Del: useless -- https://master.php.net/note/delete/111147/useless Del: bad code -- https://master.php.net/note/delete/111147/bad+code Del: spam -- https://master.php.net/note/delete/111147/spam Del: non-english -- https://master.php.net/note/delete/111147/non-english Del: in docs -- https://master.php.net/note/delete/111147/in+docs Del: other reasons-- https://master.php.net/note/delete/111147 Reject -- https://master.php.net/note/reject/111147 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#193275) next »