The arev
package provides \varheart
and \vardiamond
which are filled. (The Comprehensive LaTeX Symbols Guide is your friend here.)
\documentclass[12pt]{article}
\usepackage{arev}
\begin{document}
$\heartsuit\varheart\diamondsuit\vardiamond\clubsuit\spadesuit$
\end{document}

Since arev
changes the math font, it's maybe not the best solution. (But see Caramdir's answer for a way around that.)
The txfonts
packages also provides \varheartsuit
and \vardiamondsuit
, but again changes the math font.
\documentclass[12pt]{article}
\usepackage{newtxtext,newtxmath}
\begin{document}
$\heartsuit\varheartsuit\diamondsuit\vardiamondsuit\clubsuit\spadesuit$
\end{document}

Alternatively, if you use XeLaTeX or LuaLaTeX, there are many fonts that contain these characters.
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\suitfont{Dejavu Sans}
\begin{document}
{\suitfont♠︎♣︎♥︎♦︎♤♧♡♢}
\end{document}
