【问题标题】:Delete "very" special characters from string从字符串中删除“非常”的特殊字符
【发布时间】:2015-05-01 22:36:25
【问题描述】:

如何从字符串中删除“非常”的特殊字符?

心、星、牛、版权等字符。

我发现了这个:

$re = "/\\p{S}/i";
$str = "asdas�sadsad";
$subst = "";

$result = preg_replace($re, $subst, $str);

但删除太多(例如“+”字符)。

【问题讨论】:

  • 这些非常特殊的字符有什么一致的吗?
  • “非常特别”是什么意思?如果你说应该允许什么样的字符可能会更好。 Unicode 目前有超过 100.000 个已定义的字符。
  • 谷歌 FILTER_FLAG_STRIP_LOW 或 FILTER_FLAG_STRIP_HIGH
  • 不是从键盘输入的字符(没有 Alt + NUMPAD)
  • @Maku123PL 英文键盘?日文键盘?德语键盘?那么,如果我想用德语感谢“danke schön”,应该拼写为“danke schn”吗?

标签: php character


【解决方案1】:

您可以使用POSIX 字符类print(ASCII 墨迹用户加上宽度空格),即:

$str = "asdas�sadsad";
$str = preg_replace('/[^[:print:]]/', '', $str);

echo $str;

输出:

asdassadsad

正则表达式解释:

[^[:print:]]
  • 匹配任何不在POSIX字符类中的字符print«[^[:print:]]»

Demo


根据您的 cmets 更新:

$str = "asdas�sadsad";
$str = preg_replace('/[^`1234567890qwertyuiop\[\]asdfghjkl;\'zxcvbnm,\.-~!@%\^&\*\(\)_\+\{\}:\|<>\?ąęćżźółńQWERTYUIOPASDFGHJKLZXCVBNMĄĘĆŻŹÓŁŃ]/i', '', $str);
echo $str; 

替换列表中NOT的所有字符。


Demo 2

【讨论】:

  • @Rizier123 完美主义者! :)
  • @Maku123PL 代码不会转换,只是替换。我认为您的字符编码有问题,请根据您的需要尝试使用utf8_encode()utf8_decode()
  • 我刚刚检查了您在 pastebin 上允许的字符列表,我将创建一个新的正则表达式来删除不在该列表中的所有字符。
猜你喜欢
  • 2016-06-08
  • 2011-04-11
  • 2016-01-23
  • 1970-01-01
  • 2019-11-09
相关资源
最近更新 更多