我知道这个comment PHP.net。我想有一个类似tr
for PHP的工具,这样我可以简单地运行
tr -d " " ""
我运行php_strip_whitespace
函数失败了
$tags_trimmed = php_strip_whitespace($tags);
我运行正则表达式功能也失败了
$tags_trimmed = preg_replace(" ", "", $tags);
默认情况下,正则表达式不会考虑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
子字符串) -bytes in smart quotes)
$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,三个每em空间,四个每个空间,六个每空间,图形空间,标点符号空间,薄空间,毛发空间,零宽度空间,零宽度非连接器,零宽度连接器],线分隔符,段落分隔符,窄不间断空间,中等数学空间,字连接器,表意空间和零宽度非打破空间。
当从自动化工具或网站导出文本搜索,识别时,其中许多会破坏xml文件,并且可以无形地粘贴到PHP源代码中,导致解析器跳转到下一个命令(段落和行分隔符),导致行要跳过的代码导致间歇性,无法解释的错误,我们已经开始将其称为“文本传播疾病”
[再也不能安全地从网上复制和粘贴了。使用字符扫描程序来保护您的代码。大声笑]
是旧帖子,但可以这样做:
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()函数可能会出现问题。这就是为什么我写了“超级修剪”功能,用于处理这个问题,你也可以选择从字符串的开头,结尾或展位边修剪。
从整个字符串中删除空格的一种简单方法是使用explode函数并使用for循环打印整个字符串。
$text = $_POST['string'];
$a=explode(" ", $text);
$count=count($a);
for($i=0;$i<$count; $i++){
echo $a[$i];
}
有时您需要删除连续的空格。你可以这样做:
$str = "My name is";
$str = preg_replace('/\s\s+/', ' ', $str);
输出:
My name is
$string = str_replace(" ", "", $string);
我相信preg_replace会寻找像[: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
如果你想删除$ tags中的所有空格,为什么不只是:
str_replace(' ', '', $tags);
如果你想删除新的线路,这需要更多......
任何可能的选择是使用自定义文件包装器将变量模拟为文件。您可以使用以下方法实现:
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://协议上使用包装器的任何文件功能(你可以将它用于include,require等):
global $__myVar;
$__myVar = 'Enter tags here';
$data = php_strip_whitespace('var://__myVar');
注意:不要忘记将变量放在全局范围内(如全局$ __ myVar)
你可以使用ereg_replace
来做到这一点
$str = 'This Is New Method Ever';
$newstr = ereg_replace([[:space:]])+', '', trim($str)):
echo $newstr
// Result - ThisIsNewMethodEver
你也使用preg_replace_callback
功能。这个函数与它的兄弟preg_replace
完全相同,除了它可以采用回调函数,它可以让你更好地控制你如何操作输出。
$str = "this is a string";
echo preg_replace_callback(
'/\s+/',
function ($matches) {
return "";
},
$str
);