这个符号是: ؤْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ
这个符号有何特别之处,它从哪里来?
如何验证此类输入?或者更好的方法是如何正确显示这些符号(即不让它们重叠在其他元素上)?
这个符号是: ؤْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ
这个符号有何特别之处,它从哪里来?
如何验证此类输入?或者更好的方法是如何正确显示这些符号(即不让它们重叠在其他元素上)?
嗯,因为似乎对其他人来说并不像我想象的那么简单,所以这是我的答案。
这被称为组合变音符号。
举个例子,你可以直接写一个ä
,也可以写成ä
,结果是 "ä"。
现在你可以随意玩弄这些符号,比如这里:"ä̈̈̈̈̈̈",这里我输入了:ä̈̈̈̈̈̈
为了保护自己免受这种“Unicode”攻击,您可以限制允许每个字符后面出现的Unicode字符的数量。由于您的标记没有提供关于服务器端语言的提示,因此我无法给出确切的示例。如果您有一个纯英语网站,您可以尝试将其限制为仅使用ASCII字符。但是我不推荐这样做,因为那样我就不能用我的名字签名了:-)
我只会限制每个Unicode字符之后的数量。这可能可以通过正则表达式实现。
如果您只想避免Unicode字符“突破”它们的容器,请尝试使用style="overflow:auto"
,这似乎限制了它的呈现方式。
overflow:auto
的div中。 - rekire我刚刚将该符号复制到SQL Server和Visual Studio中,发现该符号被转换为:
所以看起来是由于 ْ
的组合(看起来像一个阿拉伯符号)使得浏览器无法识别。
该符号是阿拉伯Hamza符号。
同样的符号在IE中被正确解释。
因此,一些浏览器可能无法识别该符号。
编辑:
通常,您可以使用一些验证方式(例如限制用户只输入ASCII字符),如Javascript或PHP等语言来验证这种输入。通过这些方式,您可以根据自己的选择限制用户输入字符。
甚至更好的方法是如何正确显示这样的符号?
如果浏览器无法呈现您所显示的符号,则可以使用一些解决方法,例如将它们放在具有overflow:auto
属性的div中,但这不是一个好的解决方案。更好的方法是使用验证脚本。
屏幕上只会显示一个字符,后面跟着一条从无处来的线,这很奇怪。
但是在使用Chrome进行检查时,实际上它是由第一个字符具有Unicode 1572
,后面跟着161个绘制线条的字符,具有Unicode 1618
!之后还有一个空格,其Unicode(或ASCII代码)为32
。
&#x<HexCode>;
,您将看到魔法。所以ؤ
是Unicode到你在问题中看到的第一个字符,而ْ
是Unicode到其余的161个字符... :D - Sachinvar 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, '');
https://regex101.com/r/yW4aM8/3
你可能想要使用标签:charset=UTF-8来在所有浏览器上正确呈现整个符号,而不仅仅是在IE上尝试。我会说,你的符号看起来奇怪的唯一原因是因为变音符(重复字符)没有被正确使用,否则,所包含的字符都是合法的。如果这个符号只是某人试图误用表单输入或其他东西来实现相同的效果,我也不会感到惊讶。该符号使用纯阿拉伯字符,你需要知道的是,该语言字符的范围在Unicode中如下(JavaScript正则表达式),并且可以在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>';
.xyz { unicode-bidi: bidi-override; }
$ 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 变音符号。