Подтвердить что ты не робот

Символ не отображается правильно

Символ: ؤ ْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ

Что такого особенного в этом символе и откуда оно взялось?

Что можно сделать для подтверждения такого ввода? Или еще лучше, как могут отображаться такие символы (т.е. Не позволять им перекрываться над другими элементами)?

4b9b3361

Ответ 1

Ну, так как это кажется не таким тривиальным, как я думал, для других здесь мой ответ.

Это называется Сочетание диакритических знаков.

To give you an example you can write a ä directly or as ä which results in "ä".

Now you can mess up with that signs like here: "ä̈̈̈̈̈̈", here я entered: ä̈̈̈̈̈̈

Чтобы защитить себя от таких "юникодовых" атак, вы можете ограничить количество символов unicode, которые разрешены приходить друг за другом. Я не могу дать вам точный пример, поскольку теги не дают намека на ваш серверный язык. Если у вас есть простой английский веб-сайт, вы можете попытаться ограничить его только символами ascii. Однако я бы не стал это комментировать, потому что мне не разрешалось бы подписывать с моим именем: -)

Я бы просто ограничил количество символов Unicode друг за другом. Это можно было бы сделать с помощью регулярного выражения.

Если вы просто хотите избежать того, чтобы символы Unicode "вырвались" из их контейнера, попробуйте использовать style="overflow:auto", который, как представляется, ограничивает способ визуализации.

Ответ 2

Я просто скопировал этот символ в SQL Server и Visual Studio и обнаружил, что символ преобразован в

введите описание изображения здесь

Итак, это похоже на комбинацию ْ (которая выглядит как символ арабский символ), который браузер не может распознать.

Символ арабский символ Хамзы.

И тот же символ правильно интерпретируется IE.

введите описание изображения здесь

Итак, похоже, что некоторые браузеры не могут распознать символ.

EDIT:

Для проверки такого ввода обычно вы можете использовать некоторую проверку валидации (например, чтобы восстановить пользователя для ввода только символов ASCII) с использованием таких языков, как Javascript или PHP, с помощью которых вы можете ограничить ввод пользователем символов по вашему выбору.

Или даже лучше, как могут отображаться такие символы

Если браузер не может отобразить символ как тот, который вы указали, то в качестве обходного пути вы можете ограничить эти символы, например, положить их в div с помощью overflow:auto, но это не будет хорошим решением. Лучше было бы использовать проверку script.

Ответ 3

Странно, что на экране вы увидите только 1 символ, за которым следует линия, взятая из ниоткуда.

Но при проверке с хром на самом деле это символы с 1-м символом, имеющим Unicode 1572, за которым следует 161 символ, который рисует строку с Unicode 1618!. И после этого существует Unicode (or ASCII code) 32 для пробела.

Ответ 4

Я не уверен, что анализ ваших символов в Javascript будет полезен, но вот script, который делает это:

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. Я бы сказал, что единственная причина, по которой ваш символ выглядит странно, состоит в том, что диакритики (повторяющиеся символы) используются неправильно, в противном случае включенные символы являются законными. Я бы не удивился, если этот символ просто кто-то пытается злоупотреблять вводом формы или что-то для такого же эффекта.

Символ использует чистые арабские символы, и для того, чтобы вы знали диапазон этих языков, символы в юникоде выглядят следующим образом (javascript regex) и доступны в unicode.org:

/[\u0600-\u06FF]/g

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

// it 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; }

Я надеюсь, что это поможет. удачи.

Ответ 5

$ 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

Что арабский закон (w) с большим количеством диакритических знаков: 1 hamza (предварительно скомпонованный как характерный характер с hamza выше) и около 160 повторяющихся сукун-диакритик.