2009-08-14 110 views
62

如何去除PHP变量中的空格?去除PHP中变量内的空格

我知道这个012.netPHP.net。 我想有一个类似的工具,如tr为PHP,这样我可以运行简单的

tr -d " " "" 

我不成功功能php_strip_whitespace运行由

$tags_trimmed = php_strip_whitespace($tags); 

我跑的正则表达式功能也失败

$tags_trimmed = preg_replace(" ", "", $tags); 
+0

的可能重复[无法获得STR \ _replace()在PHP字符串去掉空格](http://stackoverflow.com/questions/16563421/cant-get-str-replace-to-strip- php-string中的空格) – 2014-03-25 00:37:56

+1

@taztodgmail查看日期。这是2009年,另一个是2013年。2013年是这个重复。 – 2014-03-25 19:02:43

+1

供参考:不包括在\ S标志UTF-8字符如UTF-8编码的NBSP ;, PS,四边形和FS http://stackoverflow.com/questions/2227921/simplest-way-to-get-a- utf-8-whitespace-characters-in-ph完整列表 – ppostma1 2016-10-14 15:38:14

回答

25

正则表达式不占UTF-8字符默认。 \s元字符仅占原始拉丁语集。因此,下面只删除制表符,空格,回车和换行

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

使用UTF-8成为主流这个表达式当它到达新UTF-8字符将更频繁失败/停止,留下白色空间后面那个\s无法解释。

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

由于缺省情况下,正则表达式不能识别多字节字符,因此只能使用分隔元字符串来标识它们,以防止字节段在其他utf-8字符中发生变化(四元组中的\x80可能会替换智能引号所有\x80子字节)

$cleanedstr = preg_replace(
    "/(\t|\n|\v|\f|\r| |\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 
); 

这解释了,并删除制表符,换行符,垂直制表符,换页,回车,空格,并且另外从here

nextline,非 - 断裂空间,蒙古语元音分隔符,[en quad,em quad,en space,em space,three-em space,four-em space,six-per-em space,figure space,标点符号空间,thin space头发空间,零宽度空间,零宽度非连接器,零宽度连接器],行分隔符,段落分隔符,窄不间断空间,中等数学空间,单词连接符,表意空间以及零宽度不间断空间。

许多这些在XML文件中肆虐的自动化工具或多个站点犯规了文本搜索,识别出口时,可无形中被粘贴到这会导致解析器跳转到下一个命令(PHP源代码段落和行分隔符)导致代码行被跳过导致间歇性的,无法解释的错误,我们已经开始将其称为“文本传输疾病”

[它不安全,从网上复制和粘贴。使用字符扫描器来保护您的代码。笑]

+1

像那样?我试图解释那个旧的不能像它应该工作 – ppostma1 2016-10-14 21:26:47

+0

非常好!你能包括你在你的设置中的字符的数量吗? - 这将帮助我们确定你确实拥有一套完整的角色。 - 我接受了你的回答,因为它比现在接受的答案更完整。 – 2016-10-14 21:40:15

+0

感谢您的帮助@Masi! – ppostma1 2016-10-18 14:43:36

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

我相信preg_repla CE将寻找类似[:space:]

5

如果你想从$到处删除所有空格标签为什么不干脆:

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

如果要删除新的生产线,并且使得将需要多一点。 ..

+2

,这实际上并没有做任何有用的事情。 – 2009-08-14 19:43:31

+0

Paul Dixon什么是变数?我在编程,但我不知道什么是变量......它对于什么有用?我可以在网上找到这个吗?知道它的含义很重要吗?为什么他们在名字前面加$? – 2015-03-21 13:33:31

130

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

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

小号ee也是this answer,它可以处理UTF-8字符串中的空格。

+19

+1,因为这将删除所有空格而不仅仅是空格。 – MitMaro 2009-08-14 19:41:23

+1

+1这是完美的,正是我所需要的。谢谢。 – 2012-12-27 18:36:18

+0

任何其他解决方案。这(preg_replace)失败了。 – Kathir 2013-02-28 12:06:49

23

有时您需要删除连续的空格。你可以这样说:

$str = "My name is"; 
$str = preg_replace('/\s\s+/', ' ', $str); 

输出:

​​
+0

谢谢。正是我一直在寻找 – Lomse 2015-02-12 11:57:28

+0

叶...其做工精细.. :) – 2016-08-22 07:44:51

2

任何可能的选择是使用自定义的文件封装模拟变量文件。您可以使用此实现它:

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

stream_wrapper_register('var', VarWrapper); 

2)然后定义您的包装类(它是真快写,不完全正确的,但它的工作原理):

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您的包装://协议(你可以用它来包括,要求等。太):

global $__myVar; 
$__myVar = 'Enter tags here'; 
$data = php_strip_whitespace('var://__myVar'); 

注意:不要忘记有你在全球范围内变量(如全球$ __ myVar的)

+0

这是复杂的,初学者可能不希望看看这个。但是为了表现出努力,我会让你满意,以便将这篇文章中的-1删除 – Ironwind 2013-09-18 05:50:38

+0

是的,我知道它非常复杂,但它有效,在某些情况下非常强大。不幸的是,它是唯一的方法(而不是创建临时文件,这是丑陋的)如何发送变量函数只能与文件(和php_strip_whitespace不是唯一的)。例如,您可以在需要之前替换代码 - 您可以为PHP创建自己的“预编译器”,您可以在其中执行任何操作。我使用它,它在编程的几年中变得非常强大和有用。 – 2013-09-24 14:19:11

1

您可以通过使用ereg_replace

$str = 'This Is New Method Ever'; 
$newstr = ereg_replace([[:space:]])+', '', trim($str)): 
echo $newstr 
// Result - ThisIsNewMethodEver 
+0

额日格被废弃了,因为PHP 5.3 – Soaku 2017-08-19 16:54:42

6

你可以用做修剪功能从PHP到修剪双方(左和右)

trim($yourinputdata," "); 

trim($yourinputdata); 

您还可以使用

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

+1

这应该是正确的答案,因为它本身,正是由OP问。它很小,很干净,可以通过添加额外的字符来修剪。 – 2017-02-11 14:04:22

+0

修剪不会删除字符串中的空格,只能在左侧和右侧。顺便说一句,空间是默认修剪,你不必给第二个参数 – Soaku 2017-08-19 16:53:03

1

你也可以使用preg_replace_callback功能。此功能与其兄弟preg_replace完全相同,只不过它可以采用回调函数,可以让您更好地控制操作输出的方式。

$str = "this is a string"; 

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

堆栈溢出是一个很好的做法,为解决问题的原因添加一个解释。有关更多信息,请阅读[如何回答](// stackoverflow.com/help/how-to-answer)。 – 2017-12-14 23:26:15

+0

您可以添加一些例子,在这种情况下,回调对'preg_replace'有用吗? – 2017-12-15 07:23:15

0

是旧的文章,但可以这样做:来HTML实体时

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; 

标准TRIM()函数可以是一个问题。这就是为什么我写了“超级修剪”功能,用于处理这个问题,你也可以选择从字符串的开始,结束或展位侧进行修剪。