使用PHP删除字符串中的额外空白字符。

问题描述 投票:0回答:1

经过广泛的研究,我仍然对如何从字符串中删除多余的空白感到困惑.我的字符串源是Jquery中的一个可编辑的div.我通过AJAX POST传递给php脚本。我把它通过AJAX POST传递给php脚本。

$('#button').on('click', function () {
var text = $('#Editable_DIV').text();
$.ajax({
        url: 'foo.php',
        method: 'POST',
        dataType: 'text',
        data: {characters: text
        },...............

     )}; 
 )};  

我的foo.php中包含'12345 6'字符串内容。

$string = trim(preg_replace('/( )+|\s\K\s+/','', $_POST['characters']));

它只删除了5个空格中的2个。

12345   6

但当我硬编码的字符串,如

$string = trim(preg_replace('/( )+|\s\K\s+/','', '12345     6'));

它的输出符合预期

12345 6

'5'和'6'字符之间只有1个空格。我尝试了许多Regex表达式组合。urldecode(),都没有用。$_POST['字符']有什么问题?

UPD.我在任何操作之前包含echo和var_dump $_POST['characters']的内容,并在操作后输出字符串。

**Before:**

12345     6

C:\xampp\htdocs\foo.php:string '12345     6' (length=15)

**After:**

12345    6

C:\xampp\htdocs\foo.php:string '12345    6' (length=14)
php jquery regex removing-whitespace
1个回答
1
投票

1.找到解决方案。

正如前面提到的,我的字符串的来源是一个可编辑的html DIV,我用它来代替普通的HTML文本区域。所以,我的字符串中包含了一些以机器语言ASCII码的形式写成的白色空格,我仍然无法理解。没有办法让你看到这种编码的白色空格。

这就是为什么REGEX不匹配'\t nbsp; " ",%C2 %A0%'等。Urldecode 函数也不能用,因为它不是URL编码的东西。 与其猜测这些空白处的内容,不如用这个函数将它们编码成html。

$data = htmlentities($_POST['characters']);

现在我的字符串输出是这样的

12345     6

我还是不明白为什么我的前4个空格会被转换为... nbsp 但第5个是正常的""空格。但至少这解释了为什么REGEX只删除了1个空格。

然后我很容易地删除了 nbsp 和额外的空格。

$stripped = trim(preg_replace('/( )+|\s\K\s+/','', $data));

现在,我的输出看起来像预期的那样:12345 6

让我们将这些html实体(如果你的字符串中有任何html标签)解码回各自的字符。

$finalString = html_entity_decode($stripped);

现在一切都完美了。

总结一下这个问题。 似乎不同的浏览器和不同的操作系统可以用不同的东西来代替HTML的空白。我认为这不是一个bug,而是浏览器OS的行为问题。只要让机器把他们的编码转换为通用的HTML实体,然后用REGEX来匹配这个实体并删除它就可以了,希望我为一些人节省了很多时间。


0
投票

我在后面又加了一个功能。请看一下。

$string = trim(preg_replace('/( )+|\s\K\s+/','', $_POST['characters']));
$string = str_replace(' ','',$string);
© www.soinside.com 2019 - 2024. All rights reserved.