2010-08-03 4 views
1

Je crée une entrée utilisateur dans laquelle je souhaite répertorier les liens ainsi que les descriptions.Créer une UL à partir de valeurs séparées par des virgules en PHP

En faisant cela à partir de zéro, je suis donc ouvert aux suggestions de syntaxe. Je pensais à quelque chose comme ceci:

www.ebay.com | "my Ebay" , http://www.craigslist.org?s=bla | "Craiglist" , 
www.twitter.com/ev | "My Twitter" 

Je voudrais convertir cela en UL avec PHP. Je pense que je voudrais utiliser un pour chacun, mais je voulais voir quelle serait la meilleure façon d'y arriver.

si les objectifs:

  1. Grab URL, si HTTP est l'ajouter, enlever
  2. Grab Description de
  3. lien Créer, similaire à ce

    <a href="http://<?php echo $link; ?>"><?php echo $desc; ?></a></li> 
    

Répondre

3
$data = explode(",", $string); 
$list = "<ul>"; 
foreach ($data as $item) { 
    list($website, $title) = explode("|", $item); 

    // Clean up the extra white spaces, if any. 
    $website = trim($website); 
    $title = trim($title); 

    // make lowercase for the below check 
    $website = strtolower($website); 

    // if website does not have http:// append it 
    $website = (strpos($website, "http://") !== 0)?"http://" . $website:$website; 

    $title = str_replace('"', "", $title); // optional, but incase you do not want the quotes. 
    //If you do want them, then I would suggest htmlspecialchars so it does not mess up the title attribute below. 
    $list .= '<li><a href="' . $website . '" title="' . $title . '">' . $title . '</a></li>'; 
} 

$list .= '</ul>'; 
echo $list; 

Devrait vous amener là où vous voulez être.

Mise à jour Notez la remarque de citation, il va casser le code HTML. Solution, supprimez les guillets comme indiqué avec str_replace ou remplacez-les par leur partie compteur html en utilisant htmlspecialchars().

Mise à jour

Ajout d'un chèque de http: // dans l'URL à la première position, si ce n'est pas là, il sera ajouté. J'ai utilisé strpos() pour faire une vérification simple.

Également ajouté et coupé les espaces autour, et le | personnages.

+0

Bien, qu'en est-il de s'assurer que chaque lien a http: // ajouté? – wesbos

+0

J'ai mis à jour le code ci-dessus. –

+0

Je préfère utiliser explode (",", $ string); puis coupez sur la sortie. De cette façon, vous obtenez vraiment tous les éléments dans le cas où il n'y a pas toujours une séparation de l'espace. –

Questions connexes