我已经在这个主题上阅读了很多内容,因为这是一个非常受欢迎的问题,但我无法找到解决方案......
我有一个带有表单的HTML ...
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
header('Content-Type: text/html; charset=utf-8');
?>
</head>
<body>
<form method="POST" accept-charset="UTF-8">
<input type="password" name="pass">
<input type="submit">
</form>
</body>
</html>
...从中我通过$ _POST全局获取密码,然后想要拆分成ascii值数组,每个值都将使用标准算术函数(+ / - / * ...)进行更改,之后从那些已更改的数字中获取ascii表中带有ord函数的字符...
$password = $_POST['pass'];
$password = str_split($password);
foreach($password as $letter) {
$letter = ord($letter);
..do some algorithmic stuff to the number I get..
$letter = chr($letter);
}
$password = implode('', $password);
...最后一步 - 把它放到mysql中......
mysql_query('update some_table set password="'.$password.'" where some_value=something');
问题?无论我如何尝试分割字符串(str_split,substr,mb_substr,preg_split,str_replace - explode等),我总是得到相同的结果,即chr(53)(显示可以&#39;的字符时显示的符号。对于数据库中的每个符号和浏览器中的输出,都可以解释为UTF-8),如果我使用特殊字符或UTF-8独有的东西,则无关紧要。我只是用标准英语字符测试它。请注意:
我现在绝望了。我非常确定我错过了一些非常简单的东西,但请帮助......
我按照预期切换了ord()和chr()函数调用的位置。我以前犯了一个错误,重点是得到ascii值(int),然后将数字转换为ascii表中相应值的字符。
答案 0 :(得分:1)
问题是,看看这些函数的定义:
string chr(int)
int ord(string)
你在信上使用了chr()。
答案 1 :(得分:0)
也许,你打算做这个代码会做什么?
$password = $_POST['pass'];
$password_letters = str_split($password);
$new_password_letters = array();
foreach($password_letters as $letter) {
$letter_code = ord($letter);
$letter_code++; // or do your algorithmic stuff to the number you get..
$new_letter = chr($letter_code);
$new_password_letters[] = $new_letter;
}
$new_password = implode('', $new_password_letters);
答案 2 :(得分:0)
对不起那些因为这个可怕的问题而浪费你时间的人。三天我找了答案,但错过了我自己的错误。编码与此无关,我只是要求chr()函数显示一个不存在的值的字符。
答案 3 :(得分:0)
@Criss 你有另一个错误。 你不仅混淆了ord()和chr()。 但是你错过了$ letter实际上是数组元素的副本,它将在当前循环迭代中处理,而不是$ password数组本身的元素。 所以这段代码
foreach($password as $letter) {
$letter = ord($letter);
..do some algorithmic stuff to the number I get..
$letter = chr($letter);
}
不会对$ password进行任何更改。你应该在循环中填充另一个数组,或者以这种方式使用foreach:
foreach ($password as $i => $letter) {
$password[$i] = your_function($letter);
}
我可以请你投票给我答案吗?我是这里的新人,甚至不能以接近零的声誉发表评论。