How can strip whitespaces in PHP's variable?
我知道这个评论php.net。我想为PHP提供类似于
1 | tr -d"""" |
我运行函数
1 |
我运行regex函数也失败
1 |
要去除任何空白,可以使用正则表达式
1 |
另请参阅此答案,了解可以处理UTF-8字符串中的空白的内容。
默认情况下,正则表达式不考虑UTF-8字符。
1 2 |
随着utf-8成为主流,当它到达新的utf-8字符时,该表达式将更频繁地失败/停止,从而留下
为了处理Unicode/UTF-8中引入的新类型的空白,需要更广泛的字符串来匹配和删除现代空白。
由于正则表达式默认不识别多字节字符,因此只能使用分隔的元字符串来识别它们,以防止字节段在其他UTF-8字符中发生更改(四元集中的
1 2 3 4 5 6 7 | $cleanedstr = preg_replace( "/(\t| |\v|\f| | |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/", "_", $str ); |
这说明并删除制表符、换行符、垂直制表符、换页符、回车符、空格,以及其他内容:
nextline, non-breaking spaces, mongolian vowel separator, [en quad, em quad, en space, em space, three-per-em space, four-per-em space, six-per-em space, figure space, punctuation space, thin space, hair space, zero width space, zero width non-joiner, zero width joiner], line separator, paragraph separator, narrow no-break space, medium mathematical space, word joiner, ideographical space, and the zero width non-breaking space.
当从自动化工具或站点导出时,这些工具或站点会破坏XML文件,这些工具或站点会破坏文本搜索、识别,并且可以无形地粘贴到PHP源代码中,从而导致解析器跳到下一个命令(段落和行分隔符),从而跳过代码行,从而导致间歇性的、无法解释的错误,我们开始被称为"文字传播疾病"
[从网络上复制和粘贴是不安全的。使用字符扫描仪保护代码。洛尔
有时需要删除连续的空白。你可以这样做:
1 2 |
输出:
1 | My name is |
1 |
我相信普瑞格·雷普的替代者会寻找像
您可以使用php中的trim函数来修剪两边(左和右)
1 |
或
1 |
您也可以使用
1 2 |
系统:php 4,5,7文档:http://php.net/manual/en/function.trim.php
如果您想从$tags中删除所有空白,为什么不仅仅是:
1 |
如果您想删除新行,这样就需要更多…
任何可能的选项都是使用自定义文件包装器将变量模拟为文件。您可以通过以下方式实现:
1)首先,注册您的包装器(在文件中只注册一次,像session_start()那样使用它):
1 |
2)然后定义包装类(它确实是快速编写的,不是完全正确的,但可以工作):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class VarWrapper { protected $pos = 0; protected $content; public function stream_open($path, $mode, $options, &$opened_path) { $varname = substr($path, 6); global $$varname; $this->content = $$varname; return true; } public function stream_read($count) { $s = substr($this->content, $this->pos, $count); $this->pos += $count; return $s; } public function stream_stat() { $f = fopen(__file__, 'rb'); $a = fstat($f); fclose($f); if (isset($a[7])) $a[7] = strlen($this->content); return $a; } } |
3)然后在var://protocol上对包装使用任何文件函数(您也可以将其用于include、require等):
1 2 3 |
注意:不要忘记将变量放在全局范围内(如global$u myvar)
您还可以使用
1 2 3 4 5 6 7 8 9 | $str ="this is a string"; echo preg_replace_callback( '/\s+/', function ($matches) { return""; }, $str ); |
你可以用
1 2 3 4 | $str = 'This Is New Method Ever'; $newstr = ereg_replace([[:space:]])+', '', trim($str)): echo $newstr // Result - ThisIsNewMethodEver |
从整个字符串中删除空格的一个简单方法是使用explode函数并使用for循环打印整个字符串。
1 2 3 4 5 6 7 |
是旧邮件,但可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | if(!function_exists('strim')) : function strim($str,$charlist="",$option=0){ $return=''; if(is_string($str)) { // Translate HTML entities $return = str_replace(" ","",$str); $return = strtr($return, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); // Choose trim option switch($option) { // Strip whitespace (and other characters) from the begin and end of string default: case 0: $return = trim($return,$charlist); break; // Strip whitespace (and other characters) from the begin of string case 1: $return = ltrim($return,$charlist); break; // Strip whitespace (and other characters) from the end of string case 2: $return = rtrim($return,$charlist); break; } } return $return; } endif; |
当HTML实体出现时,标准trim()函数可能会有问题。这就是为什么我写了"超级修剪"函数,用来处理这个问题,你也可以选择从绳子的开始、结束或展台侧进行修剪。