Bladeren bron

[php] fix StringTools lpad/rpad for unicode

Alexander Kuzmenko 6 jaren geleden
bovenliggende
commit
8e6dde7269
1 gewijzigde bestanden met toevoegingen van 16 en 4 verwijderingen
  1. 16 4
      std/php/_std/StringTools.hx

+ 16 - 4
std/php/_std/StringTools.hx

@@ -69,16 +69,28 @@ import php.*;
 		var cLength = c.length;
 		var sLength = s.length;
 		if (cLength == 0 || sLength >= l) return s;
-		var padLength = Math.ceil((l - sLength) / cLength) * cLength + sLength;
-		return Global.str_pad(s, padLength, c, Const.STR_PAD_RIGHT);
+		var padLength = l - sLength;
+		var padCount = Syntax.int(padLength / cLength);
+		if(padCount > 0) {
+			var result = Global.str_pad(s, Global.strlen(s) + padCount * Global.strlen(c), c, Const.STR_PAD_RIGHT);
+			return (padCount * cLength >= padLength) ? result : Syntax.concat(result, c);
+		} else {
+			return Syntax.concat(s, c);
+		}
 	}
 
 	public static function lpad( s : String, c : String, l : Int ) : String {
 		var cLength = c.length;
 		var sLength = s.length;
 		if (cLength == 0 || sLength >= l) return s;
-		var padLength = Math.ceil((l - sLength) / cLength) * cLength + sLength;
-		return Global.str_pad(s, padLength, c, Const.STR_PAD_LEFT);
+		var padLength = l - sLength;
+		var padCount = Syntax.int(padLength / cLength);
+		if(padCount > 0) {
+			var result = Global.str_pad(s, Global.strlen(s) + padCount * Global.strlen(c), c, Const.STR_PAD_LEFT);
+			return (padCount * cLength >= padLength) ? result : Syntax.concat(c, result);
+		} else {
+			return Syntax.concat(c, s);
+		}
 	}
 
 	public static function replace( s : String, sub : String, by : String ) : String {