【问题标题】:php preg_replace - keep specified characters + foreign language lettersphp preg_replace - 保留指定字符+外文字母
【发布时间】:2013-09-12 10:55:04
【问题描述】:

我需要一个从字符串中删除所有字符(未在模式中列出)但保留外文字母的函数。我知道 preg_replace 有 \p “模式”,但由于某种原因我无法让它工作。

我使用这个函数从字符串中删除所有废话:

$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

简单地说,该函数应该保留所有标准字母/数字和标准符号,如 +-!@#$ 等,并删除所有垃圾,如 © ™ 等。如果有比我使用的更好的方式来编写这样的 preg_replace,请告诉我。

现在,我想要保留外文字母的功能,所以我将其修改为

$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

(您会注意到添加了 \p{L})。不幸的是,它没有按预期工作。当我回显文本时,我看到外语没有被删除(这很好),但它们被转换成了�(这很糟糕)。

我该如何解决?

【问题讨论】:

  • 什么是“外文字母”?
  • 你的php脚本是utf8编码的吗?
  • 你能举一个input和预期output的例子吗?
  • 是的,它是 utf8 编码的(就像我说的,如果我在使用 preg_replace 之前回显文本文本,那么一切都很完美)。以下是一些外国字母:ą č ę ė į š ų ų(立陶宛语)
  • 当然,这是示例 - lipskas.com/test.php

标签: php unicode preg-replace


【解决方案1】:

\p{L} 仅适用于 u 修饰符:

$main_content=preg_replace("/[^\p{L}]/u", "", $main_content);

注意 / 后面加的 u

【讨论】:

  • 我缩短了这个例子。还有否定,所以它会删除除字母之外的所有内容。
  • 这个似乎工作正常,除了它删除了空格和其他符号,如 !@# 等。我想我需要将它们添加到允许的符号列表中。
  • 是的,正如我所说,它被缩短了 ;) 并且 \p{L} 匹配所有字母,无需提及 a-z
  • 我打算在列表中添加一些允许的符号,然后我“组合”了一些似乎也有效的模式(来自 Internet 上的不同示例)。万一有人需要它-$main_content=preg_replace('/[^\p{L}[:print:]]/u', "", $main_content);此功能允许使用任何语言的所有可打印字符并删除像©™这样的废话...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多