2010-02-14 72 views
0

我有以下代码PHP标记,删除多个空格

//check out the tags, if it allready exist update with 1 if not create new record 
     $tag_item = ""; 
     $tags = explode(" ", $tags); 
     foreach($tags as $tag): 
      if(!empty($tag) && $tag != " "): 
       $t_sql = mysqli_query($link, "SELECT id, times FROM shop_tags WHERE tag='".$tag."'"); 
       if(mysqli_num_rows($t_sql) == 0): 
        mysqli_query($link, "INSERT INTO shop_tags (tag, times) VALUES ('".$tag."', 1)"); 
        //find last updated id of the tags 
        $lastid = mysqli_insert_id($link); 
        $tag_item .= $lastid." "; 
       endif; 
      endif; 
     endforeach; 

于是我就用爆炸来单独的每个标签,但如果不小心造成的用户添加什么空间?我应该首先使用preg_match来过滤这个吗?如果有任何问题,我如何删除最后一个空格?

回答

2

要删除空格,第一,虽然是使用trim(),您既可以在回路中做每个标签

foreach($tags as $tag): 
    $tag = trim($tag); 

或之前:

$tags = explode(" ", $tags); 
$tags = array_map('trim', $tags); 

在这两种情况下,你将最终不得不过滤掉$tags的空物品

foreach($tags as $tag): 
    $tag = trim($tag); //This line is only required if you didn't use array_map 
    if (empty($tag){ 
     continue; 
    } 

所以它可能会更好地使用preg_replace

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

这将确保多个空格在爆炸前转换为单个空间。

1

您可以搜索(\s)+并用一个空格替换它。然后修剪你的字符串来照顾任何尾随的空白。

2
$tags = explode(" ", $tags); 

这会将空格分解为自己的标记。过滤你自己,你做的。修改,如果...

if(!empty(trim($tag))): 

你也可以提前修剪。

array_filter($tags, "trim"); 

就个人而言,我使用逗号分隔标签以允许具有空格的标签。

4

首先除去可能存在一个或多个空的空间:

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

删除结尾的空格,如果有一个:

$tags = ltrim($tags); 

然后你爆炸并进一步着手:

$tags = explode(' ', $tags); 
+0

啊哈我检查功能ltrim()但它在开始时删除空格,如果它不是rtrim()呢?删除最后一个。 – Christophe 2010-02-15 11:06:29

0

你可以使用preg函数 - 但在这种情况下str_replace函数要快得多。此外,regarless其中接近你拿,你需要申请两次方法 - 万一有奇数连续的空格(大于1):

$tags=str_replace(' ',' ',trim($tags)); // replace 2 spaces with 1 
$tags=str_replace(' ',' ',$tags); // again 
$tags=explode(' ', $tags); 

C.