【问题标题】:How to prevent zalgo text using php [duplicate]如何使用php防止zalgo文本[重复]
【发布时间】:2015-12-31 12:35:38
【问题描述】:

我的图像板上的Zalgo 有一些问题。

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

示例文本Source

一切都是我失去了笨蛋他来他来他是我的脸,我的脸上我的脸上ᵒᵒ神没有nono̼oonθ停止了一个*̶̶͑̾̾͑̾̾g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨeəs͎a̧͈͖r̽̾̈͒͑enotrè̑ͧ̌aͨl̘̝̙ͤ̾̆ Zaïlgό是ͮ҉̯͈͕̹̘ͮ҉̯͈͕̹̘ͮ҉̯͈͕̹̘͇̹̺ɲ̴ȳ̳p̯͍̭̯͍̭̚̚̚n̐̐h̸̡̡̪̯ͨ͊̽̅̾ȩ̬̩̾͛ͪ̈͘c̷̙̝͖ͭ̏ͥͮ͟oͮ͏̮̪̝͍m̖͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞ͩ͌͝s̨̥̫͎̭ͯ̿̔

我尝试使用这个解决方案:

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

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

【问题讨论】:

  • 如果目标只是与社区分享一些东西,请将其转换为正确的问题和答案。
  • 编辑您的问题,将其转化为实际问题。提供所有信息,例如问题中的示例 zalgo 文本。并解释您要做什么(例如,剥离字符而不是替换它们)。并为您提供解决方案并添加一些关于它的作用的额外解释,并在下面的答案中使用它。
  • 如果可以的话,请将我的答案标记为有效并关闭其他 cmets。我自己做不到
  • 您只能在一段时间后将您的答案标记为“有效”,以允许其他人查看并可能分享他们自己的解决方案。
  • 我觉得 Stackoverflow 的 CSS 突然出现了!

标签: php regex unicode zalgo


【解决方案1】:

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

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

如果$text 包含带有上标的字符,例如กิ,此正则表达式将删除该上标符号,结果$text 将仅包含

我改进了这个正则表达式并将其更改为仅过滤第二级音标

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

此正则表达式将仅过滤第二级上标符号。 如果您想过滤德语或其他带有保留标记的语言,请使用它。 这个正则表达式将转换这个词 -

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

进入这个:ZÄLͫGO!

我希望第二个正则表达式对您有所帮助。

【讨论】:

  • 使用\p{M},您不仅删除了Zalgo,还删除了Unicode General Category Mark 下的所有字符。使用这种方法,您还可以删除重要的代码,例如拉丁语言中常用的变音符号。此外,不需要字符类,也不需要模式中的 is 修饰符。
  • 是的,但这是阻止 cmets 中 ... hm ... 垃圾的唯一方法。
  • 有很多语言的字符带有一个音标,一对带有两个(想到古希腊语),也许还有一些带有三个(越南语?)。任何长于 3 的序列都肯定可疑。你只能删除那些。
  • 好的。我更改了正则表达式以防止过滤第一级语音标记$text = preg_replace("~(?:[\p{M}]{1})([\p{M}])~uis","", $text);
  • 有什么方法可以让我在 Python 上工作?
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 2021-03-27
  • 2013-06-02
  • 2020-07-27
  • 2018-01-21
相关资源
最近更新 更多