Encarnacion's homer, off Chad Qualls (4-3), hit the wall above the yellow line in left field and broke a 1-all tie. Bennett extended the lead with his home run, also to left, on the next pitch. Bennett added a two-run double later in the inning that made it 8-1.
Scott Spiezio had a two-run double in the ninth and pitcher Kip Wells got an RBI when his pop up dropped between second baseman Craig Biggio and right fielder Luke Scott.
The Cardinals have won three straight, while Houston has lost 11 of 12.
Albert Pujols doubled to lead off the fourth for St. Louis and he scored after a sacrifice bunt and an error by first baseman Lance Berkman to make it 1-0.
Houston tied it at 1 in the sixth when Carlos Lee hit an RBI double on the 14th pitch of his at-bat. Lee's hit sailed over a sprinting Jim Edmonds and landed on the hill in center field.
Ryan Franklin (2-0) allowed one hit and walked one in the eighth for the win.
Adam Wainwright gave up a double to Hunter Pence in the first inning and didn't allow another hit until Pence's single in the sixth. He allowed four hits and one run with six strikeouts in seven innings. He had won both of his previous starts against Houston this season.