30

符号是:ؤْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ

这个符号有什么特别之处,它来自哪里?

可以做些什么来验证此类输入?或者更好的是,如何正确显示这些符号(即不让它们与其他元素重叠)?

4

5 回答 5

21

好吧,因为它似乎不像我对其他人认为的那么微不足道,这是我的答案。

这称为组合变音符号

给你一个例子,你可以ä直接写一个或者作为ä结果“ä”。

现在你可以弄乱这样的标志:“ä̈̈̈̈̈̈”,我在这里输入:ä̈̈̈̈̈̈

为了保护自己免受此类“unicode”攻击,您可以限制允许一个接一个出现的 unicode 字符的数量。我不能给你一个确切的例子,因为你的标签没有提示你的服务器端语言。如果您有一个简单的英文网站,您可能会尝试将其限制为仅 ascii 字符。但是我不建议这样做,因为那时我不允许用我的名字签名:-)

我只想限制 Unicode 字符的个数。这可能是用正则表达式完成的。

如果您只是想避免 Unicode 字符从其容器中“突围”出来,请尝试使用style="overflow:auto"这似乎会限制其呈现方式。

于 2015-12-18T07:16:53.950 回答
9

我刚刚将符号复制到 SQL Server 和 Visual Studio,发现符号已转换为

在此处输入图像描述

所以它看起来像是浏览器无法识别的ْ(看起来像阿拉伯符号)符号的组合。

符号是阿拉伯语 Hamza 符号

同样的符号也被 IE 正确解释。

在此处输入图像描述

所以看起来有些浏览器无法识别该符号。

编辑:

要验证此类输入,您通常可以使用 Javascript 或 PHP 等语言使用某种类型的验证(例如限制用户仅输入 ASCII 字符),通过这些验证,您可以限制用户根据您的选择输入字符。

甚至更好,这样的符号怎么才能正常显示

如果浏览器无法将符号呈现为您显示的符号,那么作为一种解决方法,您可以对这些字符设置一些限制,例如将它们放在 div 中,overflow:auto但这不是一个好的解决方案。更好的方法是使用验证脚本。

于 2015-12-18T07:02:55.067 回答
6

奇怪的是,在屏幕上你只会看到 1 个字符,后面跟着一条不知从何而来的线。

但是当用chrome检查时,实际上是第一个字符有的字符Unicode 1572,然后是161个字符的画线有Unicode 1618之后是Unicode (or ASCII code) 32空间。

于 2015-12-18T07:03:01.513 回答
2

我不确定用 Javascript 解析符号是否会有所帮助,但这里有一个脚本可以做到这一点:

var text = 'your symbol goes here',
regex1 = /(?:[\u0624|\u0652])/g,
result;
// note that the symbol comprises of the letter and the repeated diacritics;
// to remove the symbol completely: 
result = text.replace( regex1, '');

这是一种查看符号中包含哪些字符以及这些字符如何使它看起来很奇怪的方法(它使用 javascript 正则表达式):

https://regex101.com/r/yW4aM8/3

您可能想meta tag: charset=UTF-8在所有浏览器上正确呈现整个符号,而不是仅在 IE 上尝试。我想说你的符号看起来很奇怪的唯一原因是因为没有正确使用变音符号(重复的字符),否则,包含的字符都是合法的。如果这个符号只是有人试图滥用表单输入或其他东西来达到同样的效果,我不会感到惊讶。

该符号使用纯阿拉伯字符,仅供您了解该语言在 unicode 中的字符范围如下(javascript regex),可在unicode.org 获得

/[\u0600-\u06FF]/g

/[\u0600-\u06FF]/g.exec( ‘text here’ );

// it's advised that you wrap the Arabic words in spans to control and show them correctly, do the following:
'text includes arabic words'.replace(/(?:([\u0600-\u06FF]+))/g, '<span class="xyz">$1</span>';

和CSS将是:

.xyz { unicode-bidi: bidi-override; }

我希望这会有所帮助。祝你好运。

于 2015-12-21T11:51:03.867 回答
0
$ echo -n ؤْْ | recode utf8..dump
UCS2   Nem   Descripción

0624   wH    arabic letter waw with hamza above
0652   0+    arabic sukun
0652   0+    arabic sukun
0652   0+    arabic sukun
[...lots of repeated lines...]
0652   0+    arabic sukun

这是带有很多变音符号的阿拉伯语 waw (w):1 个 hamza(预先组合为上面带有 hamza 的字符 waw)和大约 160 个重复的 sukun 变音符号。

于 2015-12-18T19:34:45.533 回答