符号显示不正确

Symbol not displaying properly

符号为:ؤْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ

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

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

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

所以它看起来像 ْ(看起来像 Arabic symbol)符号的组合,浏览器无法识别。

符号是Arabic Hamza symbol.

IE 也能正确解释相同的符号。

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

编辑:

要验证此类输入,通常您可以使用诸如 Javascript 或 PHP 可以限制用户根据自己的选择输入字符。

Or even better, how can such symbols be displayed properly

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

奇怪的是,在屏幕上您只会看到 1 个字符,后面跟着一条不知道从哪里画出来的线。

但是当用chrome检查时,实际上是第一个字符有Unicode 1572,后面是161个字符的字符具有 Unicode 1618 ! 的行 然后是 space.

Unicode (or ASCII code) 32

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

这叫做Combining Diacritical Marks

举个例子,你可以直接写一个 ä 或者写成 ä 结果是 "ä".

现在你可以像这里一样弄乱这些标志:"ä̈̈̈̈̈̈",我在这里输入:ä̈̈̈̈̈̈

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

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

如果您只想避免其容器的 Unicode 字符 "break out" 尝试使用 style="overflow:auto",这似乎限制了它的呈现方式。

$ 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(预合成字符 waw 和上面的 hamza)和大约 160 个重复的 sukun 变音符号。

我不确定在 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 正则表达式)并可在 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"></span>';

而 css 将是:

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

希望对您有所帮助。 祝你好运。