php标记,删除多个空格

时间:2010-02-14 17:09:07

标签: php tagging

我有以下代码

//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;

所以我使用explode来分隔每个标签,但如果用户偶然添加到空格怎么办?我应该先使用preg_match来过滤吗?如果有的话,如何删除最后一个空格?

5 个答案:

答案 0 :(得分:4)

首先删除可能的一个或多个空格:

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

删除结束空格(如果有):

$tags = ltrim($tags);

然后你爆炸并继续前进:

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

答案 1 :(得分: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);

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

答案 2 :(得分:2)

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

这会将空间分解成自己的标签。用你做的foreach过滤自己。修改如果......

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

你也可以提前修剪。

array_filter($tags, "trim");

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

答案 3 :(得分:1)

您可以搜索(\s)+并将其替换为单个空格。然后修剪你的字符串以处理任何尾随的空格。

答案 4 :(得分:0)

您可以使用preg函数 - 但在这种情况下str_replace函数要快得多。此外,无论采用哪种方法,都需要应用TWICE方法 - 如果有奇数个连续空格(大于1):

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

下进行。