/**
  * Pad a string to a certain length with another string
  *
  * @param  string  $input
  * @param  integer $padLength
  * @param  string  $padString
  * @param  integer $padType
  * @return string
  */
 public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT)
 {
     if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
         return str_pad($input, $padLength, $padString, $padType);
     }
     $lengthOfPadding = $padLength - $this->strlen($input);
     if ($lengthOfPadding <= 0) {
         return $input;
     }
     $padStringLength = $this->strlen($padString);
     if ($padStringLength === 0) {
         return $input;
     }
     $repeatCount = floor($lengthOfPadding / $padStringLength);
     if ($padType === STR_PAD_BOTH) {
         $lastStringLeft = '';
         $lastStringRight = '';
         $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
         $lastStringLength = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
         $lastStringLeftLength = $lastStringRightLength = floor($lastStringLength / 2);
         $lastStringRightLength += $lastStringLength % 2;
         $lastStringLeft = $this->substr($padString, 0, $lastStringLeftLength);
         $lastStringRight = $this->substr($padString, 0, $lastStringRightLength);
         return str_repeat($padString, $repeatCountLeft) . $lastStringLeft . $input . str_repeat($padString, $repeatCountRight) . $lastStringRight;
     }
     $lastString = $this->substr($padString, 0, $lengthOfPadding % $padStringLength);
     if ($padType === STR_PAD_LEFT) {
         return str_repeat($padString, $repeatCount) . $lastString . $input;
     }
     return $input . str_repeat($padString, $repeatCount) . $lastString;
 }
예제 #2
0
 /**
  * @dataProvider getNonSingleByteEncodings
  * @param string $encoding
  */
 public function testIsSingleByteEncodingReturnsFalse($encoding)
 {
     $this->assertFalse(StringUtils::isSingleByteEncoding($encoding));
 }