自制的php函数似乎添加了不需要的空格

时间:2016-02-15 14:19:46

标签: php html

我有一个美化问题让我烦恼不已:以下函数重新调整mysql表中的名称

  

“姓氏,名字(某事)”

进入

  

“名字姓氏”

(例如“列侬,约翰”成为“约翰列侬”。

<?php
function rearrangeName($name){
    $cut = strpos($name, "("); //locate position of opening bracket if 
        //there is one
    if($cut != ""){
        $name_without_brackets = substr($name, 0, $cut-1);//throw away 
        //stuff between brackets
    }
    else{
        $name_without_brackets = $name;
    }
    $komma = strpos($name_without_brackets, ","); //see if there are commas
    if($komma == FALSE){
        $newName = $name_without_brackets;
    }
    else{
        $newName1 = explode(", ", $name_without_brackets);//split
            //$name_without_brackets and put First name before Last name
        $newName = ($newName1[1] . "&nbsp" . $newName1[0]);
    }
    print $newName;
}
?>

类似的函数只返回姓氏。它们工作得很好,但显然添加了空白,所以当我在其他功能中使用它们用括号之间的歌曲作者来播放歌曲时,结果不是我想要的。而不是

(Lennon & McCartney), (John Lennon) and (Harrison, Lennon, McCartney, Starr)

我得到了

( Lennon & McCartney ), ( John Lennon) and ( Harrison , Lennon , McCartney , Starr )

除了“约翰列侬”末尾的那个外,空间很丰富。如果没有那个遗漏的额外空格,我甚至可能都没有注意到它。

我看了左边,右边和中心寻找解决方案,但发现没有任何效果。在每个可能的级别尝试修剪:没有工作。尝试删除每个标签或换行符:不起作用。试图摆弄css:没有用。

问题是我在链接中使用此功能吗? (并不是说我在那个方向上找到了任何指示,但我想我只是提到它了。)

Stiliyan 的要求(见下文),这里有更多背景信息。

第二个重新排列功能如下:

    <?php
function rearrangeName2($name){
    $cut = strpos($name, "("); //locate position of opening bracket if 
        //there is one
    if($cut != ""){
        $name_without_brackets = substr($name, 0, $cut-1);//throw away 
             //stuff between brackets
    }
    else{
        $name_without_brackets = $name;
    }

    $newName1 = explode(", ", $name_without_brackets);//split
       // $name_without_brackets and only keep Last Name
    $newName = $newName1[0];
    print $newName;
}
?>

在下一个函数中调用这两个函数:

<?php
function songwriter($songId){ //for one, two or many authors
    include 'connect_to_database.php';

    $result = mysqli_query($con, "SELECT Author_ID, Artist FROM
    songs_with_authors, artists
     WHERE Author_ID = artists.ID 
     AND Song_ID =" . $songId . "
     ORDER BY Artist");
     $row = mysqli_fetch_array($result);    
     if(mysqli_num_rows($result) > 1){
        if(mysqli_num_rows($result) == 2){ ?>//
            <a href="results_by_author.php?nummer=<?php echo
            $row['Author_ID']; ?>">
            <?php rearrangeName2($row['Artist']); ?></a>
            <?php $row = mysqli_fetch_array($result);
            echo " &amp; "; ?>
            <a href="results_by_author.php?nummer=<?php echo  
            $row['Author_ID']; ?>">
            <?php rearrangeName2($row['Artist']); ?></a>
            <?php
        }
        else{ ?>
            <a href="results_by_author.php?nummer=<?php echo 
            $row['Author_ID']; ?>">
            <?php rearrangeName2($row['Artist']); ?></a>
                <?php $row = mysqli_fetch_array($result);
                while ($row){
                    echo ", "; ?>
                    <a href="results_by_author.php?nummer=<?php echo 
                    $row['Author_ID']; ?>">
                    <?php rearrangeName2($row['Artist']); ?></a>
                <?php $row = mysqli_fetch_array($result);
                }
            }
    }
    else{ ?>
        <a href="results_by_author.php?nummer=<?php echo $row['Author_ID'];  
            ?>">
            <?php rearrangeName($row['Artist']); ?></a><?php
    }
}
?>

使用的日期表如下所示:首先是“艺术家”表:

ID    Artist 
1     Lennon, John 
2     McCartney, Paul
3     Harrison, George
4     Starr, Ringo

这是“songs_with_authors”表:

ID    Song_ID    Author_ID
36    355        1
37    355        2
38    355        3
39    355        4
40    356        1
41    356        2
songs_with_authors表中的

作者ID指的是艺术家表中的ID; Song_ID是指歌曲列表中的ID。

歌曲作者功能在一个单独的页面中调用,该页面创建一个带有歌曲标题的轨道列表,并且在括号内,他们的作者和该页面包含在另一个页面中,该页面显示了LP或CD的详细信息。然而,当我在一个只有Song_ID作为其参数的空页面中调用词曲作者函数时,已经出现了不需要的空白的问题。例如。作曲家(355)给出了“哈里森,列侬,麦卡特尼,斯塔尔”。 (在逗号之前使用丑陋的空格。)因为它也出现在一个完全不同的设置中,我在经典记录中显示了一个作曲家列表,其中一个额外的空格有时会导致斜线出现在一行的开头,而不管是什么,&amp; nbsp,我认为重新排列的功能必定是罪魁祸首。

3 个答案:

答案 0 :(得分:1)

print str_replace(' ', $nieuwenaam);

答案 1 :(得分:1)

这会是你想要的吗?

function herschikNaam($naam) {
    // If name contains any parenthesis, snip until right before
    if (strpos($naam, '(') !== false)
        $naam = substr($naam, 0, (strpos($naam, '(')-1));

    $naam = explode(',', $naam);
    // If there's a comma, reorder them.
    if (count($naam) === 2) 
        return trim($naam[1]) . ' ' . trim($naam[0]);
    // No comma, give it back in same order
    else 
        return implode(' ', $naam);
}

当提供例如,你似乎做你想要的&#34;列侬,约翰&#34;,&#34;列侬&amp; McCartney的&#34;

答案 2 :(得分:1)

问题在于您的锚标记与php函数中的songwriter标记之间的换行符和其他空格。以下是使用空格输出的内容:

<a href="results_by_author.php?nummer=1">
        Lennon</a>
            ,                 <a href="results_by_author.php?nummer=2">
                McCartney</a>
            ,                 <a href="results_by_author.php?nummer=3">
                Harrison</a>

浏览器将额外的空格压缩到一个区间,然后显示在输出中。

要解决此问题并避免将来出现空白问题,请在html标记之后立即打开<?php标记:

if(mysqli_num_rows($result) > 1){
    if(mysqli_num_rows($result) == 2){ ?>
        <a href="results_by_author.php?nummer=<?php
            echo $row['Author_ID']; ?>"><?php // no whitespace before tag
            rearrangeName2($row['Artist']); 
        ?></a><?php

        $row = mysqli_fetch_array($result);
        echo " &amp; ";
        ?><a href="results_by_author.php?nummer=<?php
            echo $row['Author_ID']; ?>"><?php // no whitespace before tag
            rearrangeName2($row['Artist']); ?></a><?php
    } 
    else { ?>
        <a href="results_by_author.php?nummer=<?php
            echo $row['Author_ID']; ?>"><?php // no whitespace before tag
        rearrangeName2($row['Artist']); ?></a><?php
        $row = mysqli_fetch_array($result);
        while ($row) {
            echo ", "; ?>
            <a href="results_by_author.php?nummer=<?php
                echo $row['Author_ID']; ?>"><?php // no whitespace before tag
            rearrangeName2($row['Artist']); ?></a><?php
        $row = mysqli_fetch_array($result);
    }
}