我的任务是制作一个简单的"密码"脚本。密码是通过在所提供的字符串中的其他字符之间随机替换来构建的,然后在密码文本的末尾将替换作为附加字符串发布。
这似乎对字母数字字符和一些符号很有效。然而,我试图向脚本发出英镑符号(£(,但它停止了工作。
现在,我已经检查了我在每一步都使用UTF-8编码。
该脚本由1页组成。在我的PHP文件的顶部,我有:
<?php header("content-type: text/html; charset=utf-8"); ?>
在我的HTML页面中,我在<head>
区域中有这样的内容:
<meta charset="utf-8" />
在我的"密码"answers"解密"表格中,我有:
accept-encoding="utf-8"
当我在Chrome中加载页面时,当我在Tools->encoding中检查时,它似乎使用了UTF-8编码。
问题似乎是,当我的脚本一个接一个地遍历每个字符时,它认为GBP符号的长度是2个字符。即使在使用strlen
或mb_strlen
时也是如此。
是否有某种方法可以将GBP符号和其他符号(尚待测试(的长度缩减为一个字符?或者我需要在一些额外的逻辑中编程来检测当前字符是一个长度为2的特殊字符,并相应地向前移动迭代器吗?
非常感谢。
我找到了一个解决方案,所以不想让我的问题得不到回答,以防其他人遇到类似的问题。
我正在创建一个非常简单的随机替换密码。密文应该随机替换字符串中的其他字母。因此,你的字母越多,它看起来就越模糊。但密文也以随机的方式在字符串末尾包括替换表。因此,这里有几个例子:
Hello, World!
成为
Ho,,!lrd! ,We rl,HHWd,l!eeor dWo!
或,Wlle!Hoe lrd Hr eW!doeWoH,lldr,!
或W,HHodleorH !d lH,doorr lHW!!e,We
。
我迭代原始字符串,在循环中的位置找到字母,并存储一个原始字符和一个替换字符。Unicode字符的问题是,它们似乎以Unicode翻译字符为前缀,实际上这会将其转换为2字节的字母。为了说明这一点,我只是检测循环中该位置当前使用的字符是否为字符代码194,如果是,则添加下一个字符作为同一"字母"的一部分。
为了找到字符代码,我使用了以下PHP代码:if(ord($letter) == 194){ ... }
这成功地帮助我处理了所有可能扔给它的字符。