0

我的任务是制作一个简单的“密码”脚本。密码是通过随机替换提供的字符串中的其他字符来构造的,然后在密文末尾将替换作为附加字符串发出。

这似乎适用于字母数字字符和一些符号。但是,我尝试向脚本发出英镑符号 (£),但它停止工作。

现在,我检查了我在每一步都使用了 UTF-8 编码。

该脚本由 1 页组成。在我的 PHP 文件的顶部,我有:

<?php header("content-type: text/html; charset=utf-8"); ?>

在我的 HTML 页面中,我在该<head>区域有这个:

<meta charset="utf-8" />

在我的“密码”和“解密”形式中,我有:

accept-encoding="utf-8"

当我在 Chrome 中加载页面时,当我签入工具 -> 编码时,它似乎正在使用 UTF-8 编码。

问题似乎是,当我的脚本逐个遍历每个字符时,它认为 GBP 符号的长度为 2 个字符。即使我使用strlenor也是如此mb_strlen

是否有某种方法可以将 GBP 符号和其他符号(尚待测试)缩减为一个字符的长度?或者我是否需要编写一些额外的逻辑来检测当前字符是长度为 2 的特殊字符,并相应地推进我的迭代器?

提前谢谢了。

4

1 回答 1

0

我找到了解决方案,所以不想让我的问题悬而未决,以防其他人遇到类似问题。

我正在创建一个非常简单的随机替换密码。密文应随机将字母替换为字符串中的其他字母。因此,您拥有的字母越多,它看起来就越模糊。但密文还以随机方式在字符串末尾包含替换表。所以,这里有几个例子:

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){ ... }

这成功地帮助我处理了我可能扔给它的所有角色。

于 2013-02-26T13:37:36.093 回答