关于string:如何在PHP变量中去掉空格?

How can strip whitespaces in PHP's variable?

我知道这个评论php.net。我想为PHP提供类似于tr的工具,这样我就可以简单地运行

1
tr -d""""

我运行函数php_strip_whitespace失败

1
$tags_trimmed = php_strip_whitespace($tags);

我运行regex函数也失败

1
$tags_trimmed = preg_replace("","", $tags);


要去除任何空白,可以使用正则表达式

1
$str=preg_replace('/\s+/', '', $str);

另请参阅此答案,了解可以处理UTF-8字符串中的空白的内容。


默认情况下,正则表达式不考虑UTF-8字符。\s元字符仅解释原始拉丁字符集。因此,以下命令只删除制表符、空格、回车和新行

1
2
// http://stackoverflow.com/a/1279798/54964
$str=preg_replace('/\s+/', '', $str);

随着utf-8成为主流,当它到达新的utf-8字符时,该表达式将更频繁地失败/停止,从而留下\s无法解释的空白。

为了处理Unicode/UTF-8中引入的新类型的空白,需要更广泛的字符串来匹配和删除现代空白。

由于正则表达式默认不识别多字节字符,因此只能使用分隔的元字符串来识别它们,以防止字节段在其他UTF-8字符中发生更改(四元集中的\x80可以替换智能引号中的所有\x80子字节)。

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
$str ="My   name    is";
$str = preg_replace('/\s\s+/', ' ', $str);

输出:

1
My name is


1
$string = str_replace("","", $string);

我相信普瑞格·雷普的替代者会寻找像[:space:]这样的东西。


您可以使用php中的trim函数来修剪两边(左和右)

1
 trim($yourinputdata,"");

1
trim($yourinputdata);

您也可以使用

1
2
ltrim() - Removes whitespace or other predefined characters from the left side of a string
rtrim() - Removes whitespace or other predefined characters from the right side of a string

系统:php 4,5,7文档:http://php.net/manual/en/function.trim.php


如果您想从$tags中删除所有空白,为什么不仅仅是:

1
str_replace(' ', '', $tags);

如果您想删除新行,这样就需要更多…


任何可能的选项都是使用自定义文件包装器将变量模拟为文件。您可以通过以下方式实现:

1)首先,注册您的包装器(在文件中只注册一次,像session_start()那样使用它):

1
stream_wrapper_register('var', VarWrapper);

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 $__myVar;
$__myVar = 'Enter tags here';
$data = php_strip_whitespace('var://__myVar');

注意:不要忘记将变量放在全局范围内(如global$u myvar)


您还可以使用preg_replace_callback函数。这个函数和它的兄弟preg_replace是相同的,除了它可以接受一个回调函数,这个函数可以让你更好地控制你如何操作输出。

1
2
3
4
5
6
7
8
9
$str ="this is a   string";

echo preg_replace_callback(
        '/\s+/',
        function ($matches) {
            return"";
        },
        $str
      );


你可以用ereg_replace来完成。

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
 $text = $_POST['string'];
            $a=explode("", $text);
            $count=count($a);
            for($i=0;$i<$count; $i++){

                echo $a[$i];
            }

是旧邮件,但可以这样做:

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("&nbsp;","",$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()函数可能会有问题。这就是为什么我写了"超级修剪"函数,用来处理这个问题,你也可以选择从绳子的开始、结束或展台侧进行修剪。