Symbol nie wyświetla się poprawnie [zamknięty]

Symbolem jest: ؤْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ

Co jest takiego wyjątkowego w tym symbolu i skąd się wziął?

Co można zrobić, aby zweryfikować dane wejściowe? Albo jeszcze lepiej, jak takie symbole mogą być wyświetlane prawidłowo (tzn. nie pozwalając im nakładać się na inne elementy) ?

Author: MD XF, 2015-12-18

5 answers

Cóż, ponieważ wydaje się, że nie jest to tak trywialne, jak myślałem dla innych, oto moja odpowiedź.

Nazywa się to połączeniem znaków diakrytycznych .

Aby podać przykład, możesz napisać ä bezpośrednio lub jako ä, co daje "ä".

Teraz możesz namieszać z tymi znakami jak tutaj:" ä", tu wpisałem: ä̈̈̈̈̈̈

Aby zabezpieczyć się przed takimi atakami "unicode", możesz ograniczyć liczbę znaków unicode, które mogą się po sobie pojawiać. I nie można podać dokładnego przykładu, ponieważ Tagi nie dają podpowiedzi na temat języka po stronie serwera. Jeśli masz prostą angielską stronę internetową, możesz spróbować ograniczyć ją tylko do znaków ascii. Jednak nie polecam tego, ponieważ nie wolno mi wtedy podpisywać się swoim imieniem: -)

Ograniczyłbym liczbę znaków Unicode po sobie. To może być zrobione z regex.

Jeśli chcesz uniknąć, aby znaki Unicode "wydostały się" z kontenera, spróbuj użyć style="overflow:auto" co wydaje się ograniczać sposób, w jaki jest renderowany.

 22
Author: rekire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 09:32:29

Właśnie skopiowałem symbol do SQL Server i Visual Studio i okazało się, że symbol został przekonwertowany na

Tutaj wpisz opis obrazka

Wygląda więc jak kombinacja ْ (która wygląda jak Arabski symbol )symbol, którego przeglądarka nie jest w stanie rozpoznać.

Symbolem jest Arabski symbol Hamzy .

Również ten sam symbol jest poprawnie interpretowany przez IE.

Tutaj wpisz opis obrazka

Wygląda więc na to, że niektóre przeglądarki nie są w stanie rozpoznaj symbol.

EDIT:

Aby zweryfikować takie wejście zwykle można użyć pewnego rodzaju walidacji ( jak restirct użytkownik wprowadzić tylko znaki ASCII ) przy użyciu języków takich jak Javascript lub PHP, za pomocą których można ograniczyć użytkownika do wprowadzania znaków, jak na swój wybór.

A nawet lepiej, jak takie symbole mogą być wyświetlane prawidłowo

Jeśli przeglądarka nie może renderować symbolu jako tego, który pokazałeś, to obejście problemu możesz umieścić pewne ograniczenia na tych znaków, jak umieścić je wewnątrz div z overflow:auto, ale to nie byłoby dobre rozwiązanie. Lepszym byłoby użycie skryptu walidacji.

 10
Author: Rahul Tripathi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 09:30:10

To dziwne, że na ekranie zobaczysz tylko 1 znak, a następnie linię narysowaną znikąd.

Ale po sprawdzeniu chrome, to tak naprawdę znaki z 1. znakiem mają Unicode 1572, po których następuje 161 znaki, które rysują linię o Unicode 1618 ! a potem jest Unicode (or ASCII code) 32 dla przestrzeni.

 7
Author: Sachin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 12:55:15

Nie jestem pewien, czy parsowanie symboli w Javascript będzie pomocne, ale oto skrypt, który to robi:

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, '');

Oto sposób, aby zobaczyć, jakie znaki są zawarte w symbolu i jak te znaki sprawiły, że wyglądał bardzo dziwnie (używa JavaScript regex):

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

Możesz użyć meta tag: charset=UTF-8 do poprawnego renderowania całego symbolu we wszystkich przeglądarkach, niż próbować go tylko na IE. Powiedziałbym, że jedynym powodem, dla którego twój symbol wygląda dziwnie, ponieważ znaki diakrytyczne (powtarzające się znaki) nie są używane poprawnie, w przeciwnym razie zawarte znaki są legit. Nie byłbym zaskoczony, gdyby ten symbol był po prostu kimś, kto próbuje nadużywać wprowadzania formularza lub czegoś dla tego samego efektu.

Symbol używa czystych znaków arabskich i tylko dla ciebie, aby poznać zakres znaków tego języka w unicode są następujące (JavaScript regex) i dostępne w 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>';

A css będzie:

.xyz { unicode-bidi: bidi-override; }
Mam nadzieję, że to trochę pomoże. powodzenia.
 2
Author: KQI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 11:51:03
$ 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

To jest Arabski WAW (w) z wieloma znakami diakrytycznymi: 1 hamza (prekomponowany jako znak WAW z hamza powyżej) i około 160 powtarzających się znaków diakrytycznych sukun.

 0
Author: ninjalj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 19:34:45