2015-10-03 64 views
1

我在图像板上有Zalgo存在一些问题。如何使用php防止zalgo文字

下面的文字弄乱了我的图像板。有没有办法阻止这些角色并“修复”或清理文本?

示例文本Source

一切都失去了所有我失落的他来了,他来,他来了ICH或渗透MY都面临着PONY我的脸ᵒh神,不,不拿去ØNΘ停止一个*̶͇̫͑̾̾͛͆̾ͫ̑͆g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s͎a̧͈͖r̽̾̈͒͑en otȓͧ̌̑ͧ̌aͨl̘̝̙ͤ̾̆ZA̡͊͠͝LGΌISͮ҉̯͈͕̹̘TO͇̹̺Ɲ̴ȳ̳TH̘Ë͖͖̉̉͠P̯͍̭O̚N̐Y̡H̸̡̪̯ͨ͊̽̅̾Ȩ̸̡̬̩̪̯̾͛ͪ̈ͨ͊̽̅̾͘Ȩ̬̩̾͛ͪ̈͘C̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔

我试图用这个解决方案:

$cleanMessage = preg_replace("/[^\x20-\xAD\x7F]/", "", $input_lines); 

从这里摘自:Remove special characters that mess with formating 但它仅适用于拉丁字符 谁能帮助我?

+2

如果目标仅仅是与社区分享某些内容,请将其转换为正确的问题和答案。 – PeeHaa

+0

我该怎么做? – aftamat4ik

+1

编辑您的问题将其转化为实际问题。提供所有信息在问题中示例zalgo文本。并解释你正在尝试做什么(例如剥离字符而不是替换它们)。并采取你的解决方案,并添加一些额外的解释,说明它在做什么,并在下面的答案中使用它。 – PeeHaa

回答

2

这个正则表达式替换的$text变量中的每个符号标:

$text = preg_replace("~[\p{M}]~uis","", $text); 

如果$text包含上标字符,例如กิ这个表达式将删除标符号和结果$文本将仅包含

我进行了改进此正则表达式和改变它来过滤拼音标记

$text = preg_replace("~(?:[\p{M}]{1})([\p{M}])+?~uis","", $text); 

此正则表达式的唯一第二级将过滤标符号的仅第二电平。 如果要过滤带有预留标记的德语或其他语言,请使用它。 此正则表达式将改变这个词 -

͐̈ͩ̎Zͮ͌ͦ͆ͦͤÃ̉͛̄ͭ̈̚LͫG̉̋͂̉Oͨ͌̋͗!

到这一点:ZÄLͫGO!

我希望第二个正则表达式会帮助你。

+4

使用'\ p {M}'您不仅可以删除Zalgo,还可以删除[Unicode General Category'Mark']下的所有字符(http://unicode.org/reports/tr44/# General_Category_Values)。使用这种方法,您还可以删除重要的代码,例如拉丁语中常用的变音符号。此外,不需要字符类,也不需要模式中的“i”或“s”修饰符。 – Mariano

+0

是的,但这是唯一的方法来阻止...嗯...垃圾在评论中。 – aftamat4ik

+0

有很多语言的字符有一个注音符号,一对夫妇有两个(古希腊人想到),也许有几个与三个(越南语?)。任何超过3的序列*肯定是可疑的。你只能删除这些。 – usr2564301