![]() |
1
290
7位ASCII?如果您的tardis于1963年刚刚登陆,而您只需要7位可打印的ASCII字符,那么您可以使用以下命令从0-31和127-255中删除所有内容:
它匹配0-31、127-255范围内的任何内容并将其删除。 8位扩展ASCII?你掉进了一个热水浴缸时间机器,现在你已经80多岁了。 如果您有某种形式的8位ASCII,那么您可能希望将字符保持在128-255范围内。一个简单的调整-只需寻找0-31和127
UTF-8?
啊,欢迎回到21世纪。如果您有一个utf-8编码的字符串,那么
这只会删除0-31和127。这在ascii和utf-8中有效,因为它们都共享
same control set range
(如下面的mgutt所述)。严格来说,如果没有
如果你在处理unicode,有 potentially many non-printing elements ,但让我们考虑一个简单的问题: NO-BREAK SPACE (U+00A0)
在UTF-8字符串中,这将被编码为
附录:Str_Replace怎么样?preg ou replace非常有效,但是如果您经常执行此操作,您可以构建一个要删除的字符数组,并使用下面mgutt提到的str ou replace,例如。
从直觉上看,这似乎会很快,但情况并非总是如此,您应该确定基准,看看它是否能为您节省任何东西。我用随机数据在不同的字符串长度上做了一些基准测试,这个模式是使用php 7.0.12出现的。
时间本身是10000次迭代,但更有趣的是相对差异。最多512个字符,我看到普瑞格取代阿尔韦获胜。在1-8kb范围内,str_replace具有边缘优势。 我认为这是一个有趣的结果,所以把它包括在这里。 重要的是不要拿这个结果来决定使用哪种方法,而是要根据自己的数据进行基准测试,然后再决定。 |
![]() |
2
132
这里的许多其他答案没有考虑到Unicode字符(例如_¶_·_ ___»_·_ __?___)。在这种情况下,您可以使用以下内容:
范围内有一类奇怪的字符
如果还希望删除换行符、回车符、制表符、不间断空格和软连字符,可以使用:
注意你 必须 以上示例使用单引号。 如果您希望删除除基本可打印的ASCII字符(上面的所有示例字符都将被删除)以外的所有内容,则可以使用:
有关参考,请参见 http://www.fileformat.info/info/charset/UTF-8/list.htm |
![]() |
3
25
可以使用字符类
|
![]() |
4
23
从php 5.2开始,我们还可以访问filter_var,我没有看到任何提到过它,所以我认为我会把它扔掉。要使用filter_var删除不可打印字符<32和>127,可以执行以下操作: 筛选32以下的ASCII字符
筛选127以上的ASCII字符
脱衣:
您还可以在剥离高字符的同时对低字符(换行符、制表符等)进行HTML编码:
还有一些选项可用于剥离HTML、清理电子邮件和URL等。因此,许多选项可用于清理(剥离数据)甚至验证(如果无效,则返回false,而不是静默剥离)。 Sanitization: http://php.net/manual/en/filter.filters.sanitize.php 验证: http://php.net/manual/en/filter.filters.validate.php 但是,仍然存在这样的问题,即过滤器_flag_strip_low将删除换行符和回车符,这对于文本区域来说是完全有效的字符……因此,我想某些regex答案有时仍然是必要的,例如,在检查完此线程后,我计划对文本区域执行此操作:
这似乎比由数字范围去除的一些正则表达式更具可读性。 |
![]() |
5
18
这更简单:
|
![]() |
6
14
所有的解决方案都是部分工作的,即使是下面的解决方案也可能无法涵盖所有的情况。我的问题是试图在utf8 mysql表中插入一个字符串。字符串(及其字节)都符合UTF8,但有几个坏序列。我假设它们中的大多数是控制或格式化的。
为了进一步加剧这个问题,表、服务器、连接和呈现内容是 talked about a little here |
![]() |
7
9
我的符合UTF-8的版本:
|
![]() |
8
6
您可以使用常规Express删除除要保留的字符以外的所有内容:
将所有非(^)字母a-z或a-z、数字0-9、空格、下划线、hypen、加号和号-替换为空(即删除它)。 |
![]() |
9
5
这将删除所有控制字符(
http://uk.php.net/manual/en/regexp.reference.unicode.php
离开
|
![]() |
10
3
这个
answer of @PaulDixon
但最后,重要的是不要删除128-255,因为例如
如果从utf-8字符串(可能是多字节utf-8字符的起始字节)中删除ASCII字符128-255,它将杀死许多utf-8字符。所以不要这样做!它们在所有当前使用的文件系统中都是完全合法的字符。 The only reserved range is 0-31 . 而是使用此命令删除不可打印的字符0-31和127:
它 使用ASCII和UTF-8 因为两者都分享 same control set range .
这个
如果要保留所有空白字符
由@pauldixon测试并由本人验证。 |
![]() |
11
2
怎么样:
完全控制我想要包括的内容 |
![]() |
12
1
标记的anwser是完美的,但它缺少字符127(del),该字符也是不可打印的字符 我的答案是
|
![]() |
13
0
“Cedivad”用瑞典字符和的持久结果为我解决了这个问题。
谢谢! |
![]() |
14
0
对于仍在寻找如何在不删除不可打印字符的情况下执行此操作的任何人,我之所以这样做是为了帮助他们。请随时改进它!字符转义到\\x[a-f0-9][a-f0-9]。 这样称呼:
|
![]() |
15
0
我解决了使用utf8的问题 https://github.com/neitanod/forceutf8
|
![]() |
16
0
从输入字符串中除去所有非ASCII字符
该代码删除十六进制范围0-31和128-255中的任何字符,只在生成的字符串中保留十六进制字符32-127,在本例中我称之为$result。 |
![]() |
17
-1
这对我有用。我必须将任意标题的字符串转换为seo的slug。
|