RandomLib icon indicating copy to clipboard operation
RandomLib copied to clipboard

Compatibility with multibyte characters

Open Trainmaster opened this issue 10 years ago • 1 comments

$factory = new RandomLib\Factory;
$generator = $factory->getGenerator(new SecurityLib\Strength(SecurityLib\Strength::MEDIUM));

var_dump($generator->generateString(8, 'abc'));
// string(8) "bbcaaacb"

var_dump($generator->generateString(8, 'äöü'));
// string(8) "ö¼Ã¤Ã¼¶"

var_dump($generator->generateString(8, 'a'));
// string(0) ""

var_dump($generator->generateString(8, 'ä'));
// string(8) "¤¤Ã¤¤¤Ã¤"

Trainmaster avatar Mar 30 '14 10:03 Trainmaster

In general, this will not be solvable unless significant constraints are put on the character set. As in make that a 3rd option to the method. This would require abstracting mb_string and intl, as we're not sure if they are available, and which one is.

Which means it's definitely possible, but it's not trivial. I'd suggest in the mean time doing it yourself:

$string = "";
$chars = "äöü";
$len = mb_strlen($chars, "utf-8");
for ($i = 0; $i < 8; $i++) {
    $string .= $chars[$generator->generateInt(0, $len)];
}

ircmaxell avatar Mar 31 '14 14:03 ircmaxell