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

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

tr -d""""

我运行函数php_strip_whitespace失败

$tags_trimmed = php_strip_whitespace($tags);

我运行regex函数也失败

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

的可能重复项无法获取str_replace()以除去PHP字符串中的空格

@塔兹托格马利看看日期。这是2009年,另一个是2013年。2013年是这个的复制品。

仅供参考s标志不包括utf-8字符,如utf-8编码的nbsp;、ps、quads和fs stackoverflow.com/questions/2227921/…

当然!我有一套处理它的代码

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

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

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

+1,因为这将删除所有空白,而不仅仅是空格。

+这是完美的,正是我需要的。谢谢。

任何其他解决方案。这对我来说是失败的。

凯瑟,有什么输入失败了?

为什么人们总是把+放在s之后?你不需要它。

这比一个接一个地替换它们快了一个数量级,这就是为什么:)

这个解决方案有两个问题,第一个问题是删除所有空白,所以"公共函数"将变成"publicFunction",这是不好的;第二个问题是,它甚至在需要的时候替换字符串中的空白。

听起来您正试图解决OP的另一个问题。这是一个从字符串中删除所有空白的解决方案。

完美的解决方案!

我们应该像ppostma所指出的那样用一组空格扩展您的电源吗?

默认情况下,正则表达式不考虑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|

|\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源代码中,从而导致解析器跳到下一个命令(段落和行分隔符),从而跳过代码行,从而导致间歇性的、无法解释的错误,我们开始被称为"文字传播疾病"

[从网络上复制和粘贴是不安全的。使用字符扫描仪保护代码。洛尔

像那样吗?我试着解释老的那个不工作了

杰出的!你能把你所拥有的字符数包括在内吗?--这将有助于我们确定您确实拥有一套完整的字符。--我接受了你的回答,因为它比以前接受的答案更完整。

谢谢你的帮助@masi!

谢谢,但是使用trim()应该是正确的答案。

除非你读了这个问题。

难道regex中不应该有u标志吗?

这是不必要的,因为它使用固定的字符串和替换符:如果在字符集(如[

xc2x85xa0])中正确地执行,则需要A/U来表示utf-8字符串是多字节的。(或者它会从源文本中删除每个单独出现的xc2、x85和xa0)。但是字符集版本是不容易理解的。

有时需要删除连续的空白。你可以这样做:

$str ="My   name    is";

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

输出:

My name is

谢谢。正是我要找的

是的……它的工作很好……:)

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

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

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

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

这应该是正确的答案,因为它是本机的,正是OP所要求的。它是小的,干净的和"可扩展"的添加额外的字符要修剪。

修剪不会删除字符串中的空格,只在左右两侧。顺便说一句,空格是trim中的默认值,您不必给出第二个参数

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

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

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

如果您不将结果赋给变量,这实际上不会做任何有用的事情。

保罗·狄克逊什么是变量?我正在编程,但我不知道什么是变量…它对什么有用?我能在网上找到这个吗?知道这意味着什么很重要?他们为什么把美元放在名字前面?

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

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

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://protocol上对包装使用任何文件函数(您也可以将其用于include、require等):

global $__myVar;

$__myVar = 'Enter tags here';

$data = php_strip_whitespace('var://__myVar');

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

这很复杂,初学者可能不想看这个。但是为了表现出努力,我会投你反对票,这样这篇文章中的-1将被删除。

是的,我知道它很复杂,但它确实有效,在某些情况下它确实很强大。不幸的是,它是唯一的方法(而不是创建tempfiles,这是丑陋的)如何将变量发送到只与文件一起工作的函数(而php_strip_whitespace不是唯一的方法)。例如,您可以在需要之前替换代码——您可以为PHP创建自己的"预编译器",在那里您可以做任何您想做的事情。我使用它,它在多年的编程过程中变得非常强大和有用。

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

$str ="this is a   string";

echo preg_replace_callback(

'/\s+/',

function ($matches) {

return"";

},

$str

);

对于堆栈溢出,最好添加一个解释,说明解决方案应该工作的原因。有关更多信息,请阅读如何回答。

您能举例说明回调在哪些情况下对preg_replace有用吗?

你可以用ereg_replace来完成。

$str = 'This Is New Method Ever';

$newstr = ereg_replace([[:space:]])+', '',  trim($str)):

echo $newstr

// Result - ThisIsNewMethodEver

由于php 5.3,不推荐使用ereg。

从整个字符串中删除空格的一个简单方法是使用explode函数并使用for循环打印整个字符串。

$text = $_POST['string'];

$a=explode("", $text);

$count=count($a);

for($i=0;$i

echo $a[$i];

}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值