PHP表单数据,UTF-8编码,符号正在崩溃


PHP form data, UTF-8 encoding, symbols are breaking

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

这似乎对字母数字字符和一些符号很有效。然而,我试图向脚本发出英镑符号(£(,但它停止了工作。

现在,我已经检查了我在每一步都使用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个字符。即使在使用strlenmb_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){ ... }

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