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