java 如何识别和拒绝字符从数学字母数字符号在统一码,范围U+1D400到U+1D7FF?

yk9xbfzb  于 2023-02-28  发布在  Java
关注(0)|答案(2)|浏览(83)

我注意到用户𝙼𝚊𝚛𝚜𝚋𝚎𝚛𝚐在填写城市时在我们的表单中输入了文本““。我们希望在表单中拒绝此类文本。我尝试搜索了一会儿,但找不到这是什么类型的文本,如何拒绝?
进一步看,对该文本进行编码会得到如下输出:'%F0%9D%99%BC%F0%9D%9A%8A%F0%9D%9A%9B%F0%9C%F0%9D%9A%8B%F0%9D%9A%8E%F0%9D%9A%90',但看起来此文本确实是UTF-8编码的。
我在这个领域的知识有限,有人能指导是否有办法阻止这样的文本吗?或者这是什么类型的字符串?
感谢帮助!我会更新问题,以便一旦我收到答案就更有意义。

ccgok5k5

ccgok5k51#

您可以尝试使用只允许字母数字字符的正则表达式:

if (!input.match(/^\w+$/)) {
    return console.log('only alphanumerical chars are allowed')
} else {
    //proceed with script
}
    • 说明:**
  • ^字符串的开头
  • \w任何单词字符(A-Z、a-z、0 - 9、_)。
  • $字符串结尾
2uluyalo

2uluyalo2#

我有一个类似的问题与一些事件文本进来。他们有时包含类似的UTF8措辞,而不是正常的ASCII字符。
您可以通过显示每个订单的订单号来显示此信息:

$splitted = mb_str_split($title);
           foreach ($splitted as $char) {
           echo mb_ord($char) . ' ';
       }

这样,您还可以使该范围内的字符无效:“请使用正常的A-Z......”等
另一个选择是创建一个utf8=〉ascii字符的Map并自动替换它们。
请参见https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols以获取该范围内所有这些值的列表。
下面是一个工作原理的例子:

<?php

namespace App\Inflector;

class Utf8Decoder
{
    /**
     * @var array<string>
     */
    protected static array $charMap = [
        119808 => 65, // '𝐀' - '𝐙'
        119834 => 97, // '𝐚' - '𝐳'
        120276 => 65, // '𝗔' => '𝗭',
        120302 => 97, // '𝗮' => '𝘇',
    ];

    /**
     * @param string $string
     *
     * @return string
     */
    public static function decode(string $string): string
    {
        $charMap = static::charMap();

        $split = mb_str_split($string);
        foreach ($split as $k => $char) {
            $ord = mb_ord($char);

            if (!isset($charMap[$ord])) {
                continue;
            }

            $split[$k] = mb_chr($charMap[$ord]);
        }

        return implode('', $split);
    }

    /**
     * @return array<string, string>
     */
    protected static function charMap(): array
    {
        $charMap = [];

        foreach (static::$charMap as $k => $v) {
            for ($i = 0; $i < 26; $i++) {
                $charMap[$k + $i] = $v + $i;
            }
        }

        return $charMap;
    }
}

相关问题