这是 lib.php 中的代码:
<?php
class table {
function __construct($string, $time) {
$out = '<table cellpadding="5">';
$out .= $this->getRow('th', 'Nom., Shuffled String, Lenght');
for ($x = 1; $x <= $time; $x++) {
$shuffledStr = str_shuffle($string); //Maybe this causes the problem
$shuffledStr_len = strlen($shuffledStr);
$out .= $this->getRow('td', $x . ', ' . $shuffledStr . ', ' . $shuffledStr_len);
}
$out .= '</table>';
echo $out;
}
public function getRow($tagName, $contents_list) {
//Variables:
$out = '';
$contents_array = explode(', ', $contents_list);
$contents_number = count($contents_array);
$start_tag = '<' . $tagName . '>';
$end_tag = '</' . $tagName . '>';
// Build
$out .= '<tr>';
for ($i = 0; $i < $contents_number; $i++) {
$out .= $start_tag . $contents_array[$i] . $end_tag;
}
$out .= '</tr>';
return $out;
}
}
?>
这里是 index.php:
<?php
require_once 'lib.php';
$string = ''; //My string
$shuffleTimes = 100;
$table = new table($string, $shuffleTimes);
?>
这个程序获取一个字符串和你想要洗牌的数字,然后创建一个表并返回数字、洗牌的字符串和每行中洗牌字符串的长度。
例如,如果我将变量设置$string
为“堆栈溢出”,它会正常工作(它随机打乱这个词 100 次,返回所有长度 14,所有打乱字符串的长度实际上是 14。)
但...
如果我向变量添加一些特殊字符$string
(例如Stack Overflow+_)(*&^%$#{}[]<>@!~./=-
),它将无法正常工作。这意味着它返回长度 37 但它们没有 37 个字符!(例如,它打印nothing
并打印它的长度38
。我认为这有点奇怪。:(
这是为什么?!哪个角色导致了这种情况以及如何解决?