【问题标题】:Delete spaces php删除空格 php
【发布时间】:2013-08-12 18:27:13
【问题描述】:

我需要从字符串中删除所有标签并使其没有空格。

我有字符串

"<span class="left_corner"> </span><span class="text">Adv</span><span class="right_corner"> </span>"

使用 strip_tags 后我得到字符串

" Adv "

使用修剪功能我无法删除空格。

JSON 字符串看起来像“\u00a0...\u00a0”。

帮我删除这些空格。

【问题讨论】:

  • 您是在剥离标签之前还是之后使用修剪?
  • 那些有问题的字符被称为“不间断空格”。 Oskar 编写的解决方案应该可以工作(使用 preg_replace)。

标签: php trim spaces


【解决方案1】:

您应该使用preg_replace(),使其以多字节安全的方式。

$str = preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', $str);

备注

  • 这将解决初始 @Андрей-Сердюк 的问题:它将修剪 \u00a0,因为 \s 也匹配 Unicode 不间断空格
  • /u 修饰符 (PCRE_UTF8) 告诉 PCRE 将主题作为 UTF8 字符串处理
  • \x00 匹配空字节字符以模仿默认 trim() 函数行为

已接受@Андрей-Сердюкtrim() 答案将与多字节字符串混淆。

例子:

// This works:
echo trim(' Hello ', ' '.chr(0xC2).chr(0xA0)); 
// > "Hello" 

// And this doesn't work:
echo trim('  Solidarietà  ', ' '.chr(0xC2).chr(0xA0)); 
// > "Solidariet?" -- invalid UTF8 character sequense

// This works for both single-byte and multi-byte sequenses:
echo preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', ' Hello ');
// > "Hello"
echo preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', ' Solidarietà '); 
// > "Solidarietà"

【讨论】:

  • 经过 4 小时的搜索,这似乎是可行的解决方案!
【解决方案2】:

这个问题的解决方案

$str = trim($str, chr(0xC2).chr(0xA0))

【讨论】:

  • 这是唯一一个真正为我工作的。我的字符串有一些奇怪的空格字符!
  • 此解决方案不是多字节安全的,它会破坏 UTF8 字符串的编码(请参阅我对问题的回答)。
【解决方案3】:
$str = '<span class="left_corner"> </span><span class="text">Adv</span><span class="right_corner"> </span>';
$rgx = '#(<[^>]+>)|(\s+)#';
$cleaned_str = preg_replace( $rgx, '' , $str );
echo '['. $cleaned_str .']';

【讨论】:

  • 它使我的字符串为空。对于其他字符串,它会删除单词之间的所有空格。
【解决方案4】:

怎么样:

$string = '" Adv "';
$noSpace = preg_replace('/\s/', '', $string);

?

http://php.net/manual/en/function.preg-replace.php

【讨论】:

  • 它使我的字符串为空并删除其他单词之间的所有空格(如果存在)。