如何在PHP中将字符串转换为符号

3

如何将密码字符串转换为指定的符号,例如*或其他符号。

我目前正在处理修改密码页面。 我希望在页面上显示密码,并避免被他人发现,因此我希望将密码字符串转换为与<input type="password" />相同长度的符号,例如*。 下面是一个示例:


2
你是如何存储密码以便能够再次检索它的?你应该对密码进行哈希处理,而不是在页面上显示它们。 - gen_Eric
1
@Rocket 确实如此,尽管这取决于应用程序。我花了很多时间编程/修复/对着无线路由器大喊大叫,当无法从路由器中检索当前编程的WPA密钥时,我真的感到非常恼火,因此我被迫重置它,因为某些白痴的最终用户忘记了他们设置的内容,然后我不得不在电话上花费3个小时向他们解释如何使Windows忘记无线网络,以便您可以重新加入它们并再次设置密钥和<沉重的呼吸> grrrr..... - DaveRandom
6个回答

10
$output_password = str_repeat ('*', strlen ($input_password));

1

在HTML中不要输出密码,而是创建一个星号(*)代表密码的表示形式。这可以通过str_repeat函数轻松完成:

<?php
$password = "MyPasswordThatIWantToMask";
$maskedPassword = str_repeat("*", strlen($password));
?>

现在你只需将$maskedPassword输出为密码字段的值。

然而,另一个非常有趣的问题是:你如何知道用户的密码长度?我真诚地希望你对密码进行哈希处理,而不是以明文形式存储。


1
如果您正在寻找一种简单的方法,只需创建与密码长度相等的星号字符串:
$modified = str_repeat( "*", strlen( "secretpass" ) );

echo $modified; // **********

0

像这样做:

$passwordstring = "password";
$outputpassword = "";
while(strlen($outputpassword)<strlen($passwordstring))
{
    $outputpassword .= "*";
}

echo $outputpassword

1
尝试使用内置函数,如 str_repeat ;)。 - Styxxy

0

虽然这里有很多回答展示了str_repeat()的用法,但我有点怀疑这是否是你想要的。毕竟,任何傻瓜都可以用一个字符填充字符串,在这种情况下这样做没有什么意义,因为我们可以像你正确指出的那样简单地使用<input type="password" />(是的,你仍然可以从源代码中获取密码,但那么为什么要填充一个混淆字段呢?或者不只是用一个固定数量的*字符填充它?)。

我猜你更像是在寻找这样的东西:

<?php

  $thePassword = "thisIsMyPassword";

?>

<input type="text" id="input_user_types_in" value="<?php echo str_repeat('*', strlen($thePassword)); ?>" />
<input type="hidden" id="value_to_post_back" name="value_to_post_back" value="<?php echo $thePassword; ?>" />

<script type="text/javascript">

  var textInput = document.getElementById('input_user_types_in');
  var hiddenInput = document.getElementById('value_to_post_back');

  textInput.onfocus = function() {
    this.value = hiddenInput.value;
  };

  textInput.onblur = function() {
    var i;
    hiddenInput.value = this.value;
    this.value = '';
    for (i = 0; i < hiddenInput.value.length; i++) {
      this.value = this.value + '*';
    }
  };

</script>

拿它来fiddle一下吧 ;-)


0
一种方式是使用类型为密码的输入框,但将其设置为禁用状态。 <input type='password' disabled='disabled' value='somepassword' />

右键单击 => 检查元素:哦,那就是密码。唉。 - Styxxy
1
@Styxxy 是的,但他说他想避免有人经过时“忽略”密码,我认为这意味着在您尝试更改密码时查看屏幕。当然,如果这是通过HTTP而不是HTTPS进行的,则我不会使用此解决方案。但对于他的目的,这可能已足够。如果我的用户从公共场所登录,他们可能会忘记注销,因此我也不会使用此解决方案。 - Kasapo
好的,那就这样吧。然后密码字段应该足够了,反正你也看不到密码。 - Styxxy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接