php finden emoji [update vorhandener code]
Ich versuche zu erkennen, emoji in meinem php-code, und verhindern, dass Benutzer eingeben.
Den code, den ich habe ist:
if(preg_match('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', $value) > 0)
{
//warning...
}
Funktioniert aber nicht für alle emoji. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie wirklich wollen, zu entsprechen Unicode-einen Charakter der Stufe, anstatt zu versuchen, um zu verfolgen UTF-8-byte-Sequenzen. Verwenden Sie die
u
modifier zu behandeln Ihre UTF-8-string auf ein Zeichen Grundlage.Emoji-codiert sind, die in dem block U+1F300–U+1F5FF. Allerdings:
viele Charaktere aus dem japanischen Carrier' 'emoji' - sets sind tatsächlich zugeordnet vorhandenen Unicode-Zeichen, z.B. der Karten-Anzüge, die Sternzeichen und einige Pfeile. Zählt man diese Symbole als "emoji" jetzt?
gibt es noch Systeme, die nicht den neu-standardisierten Unicode-emoji code-Punkte, anstatt mit ad-hoc-Bereiche in der Private Use Area. Jeder Träger hatten Ihre eigenen Codierungen. iOS 4 verwendet die Softbank-set. Mehr info. Können Sie sperren möchten, den gesamten Privaten Bereich.
zB:
unichr(0x2190).'-'.unichr(0x27FF)
.Aus der wikipedia:
Hier ist die mapping-Datei. Es gibt 722 Zeilen in der Datei, jeder repräsentiert eine der 722 emoticons.
Wie es scheint, dies ist nicht eine einfache Sache zu tun, weil es nicht eine bestimmte block beiseite für emoji. Sie müssen passen Sie Ihre regex, um alle emoji unicodes.
Könnte man mit einer einzelnen unicode-etwa so:
1F30F ist der unicode für ein emoticon von einem Globus.
Sorry das ich keine vollständige Antwort für Sie, aber dies sollte erhalten Sie unter der Leitung in die richtige Richtung.
Die richtige Antwort ist, um zu erkennen, wo Sie ein Codepunkt zugeordnet, die in der
Miscellaneous_Symbols_And_Pictographs
block. In Perl, die Sie verwenden würden,oder nur
die Sie kombinieren sollten diese in einem Muster mit
Ich erinnere mich nicht, ob die PCRE-Bibliothek, die PHP verwendet, erhalten Sie Zugriff auf die notwendigen Unicode-Zeichen-Eigenschaften. Meine Erinnerung ist, dass es ziemlich schwach, sich in einem bestimmten Gebiet. Ich denke, Sie haben nur die Unicode-Eigenschaften und Allgemeine Kategorien. Seufz.
Manchmal Sie nur verwenden Sie die Reale Sache.
Mangels anständige Unicode-Unterstützung, müssen Sie möglicherweise zum auflisten der block selbst:
Sieht aus wie ein Wartungs-Albtraum für mich, voll von magischen zahlen.
/[\x{1F300}-\x{1F5FF}]/]
?Das ist, was ich kam mit heute. Es ist wahrscheinlich nicht eine gute Lösung für dieses problem, aber zumindest funktioniert es 😉
iconv
überhaupt. Vielleicht habe ich missverstanden, das problem.