"He did a good job mixing his pitches, stayed really composed," Phillies manager Gabe Kapler said. "Maybe he did not look as crisp early on as he did his last outing and then it just started coming together for him. He found his rhythm, he found his confidence, he found his mojo and then he started attacking them."
Odubel Herrera had a pair of hits, reached three times and drove in a run to spark the Phillies offense. He also made a nice running catch on a Paul DeJong drive to help snuff out a potential Cardinals rally in the sixth.
The Phillies (25-16) continued their dominance outside of the National League East, improving to 17-2 against non-division rivals including an 8-0 record against the National League Central. Philadelphia moved to nine games above .500 for the first time since the end of the 2011 season when it won a club record 102 games.
Velasquez (4-4) went 6 1/3 innings and allowed five hits while striking out five and walking two.
"I felt a lot more controlled and composed from the start [with] secondary pitches getting outs and [I was] pounding the fastball to offset the hitters," Velasquez said. "What I liked most was holding the ball longer and executing a quality pitch."
It is the third straight strong start for Velasquez in May. The right-hander improved to 3-0 in the season's second full month and he has a 2.08 ERA during that span with 21 strikeouts compared to seven walks. Overall, Velasquez has dropped his season ERA from 5.70 entering May to 4.37.
"I went into more of a comfort zone on my own," Velasquez said. "That's something you've got to cherish and build on. A lot of obstacles are thrown at you, and you've just got to adjust. That's the whole part of this game is making adjustments, and it seems like things are kind of turning around."
Carlos Santana's majestic 437-foot solo home run to dead center in the fifth gave the Phillies a 1-0 lead. It was Santana's eighth of the season and sixth in his last 11 games.
"Sometimes it's one swing, one pitch," Weaver said. "I thought it was a decently good one [to Santana]. He ambushed it and put a good swing on it. Obviously they added some later on, but at that point it was a pitchers' duel."
Aaron Altherr's two-run single punctuated a three-run eighth and stood as the game-winning RBI. Pedro Florimon added a two-run homer in the ninth, his first dinger since Sept. 27, 2013. The four-year, 232-day drought was the longest a player went between homers since San Francisco's Guillermo Quiroz broke a 4 year, 323 day drought on May 4, 2013.
"Huge home run for him," Kapler said. "The dugout exploded. Everybody was so excited for him and deservedly so."
Weaver (3-3) allowed just four hits in seven innings. He struck out six and walked just one.
MOMENT THAT MATTERED Velasquez was chased after walking Dexter Fowler to lead off the seventh and allowing a well-placed double by Matt Carpenter that snuck in between Herrera and Rhys Hoskins in left-center field, giving the Cardinals their best scoring chance with runners on second and third and one out. Seranthony Dominguez came on in relief to induce a ground ball to a drawn-in infield by Francisco Pena and a flyout by Greg Garcia to keep the Cardinals off the board.
"It was the first time I've been in that situation like that in the big leagues," Dominguez said through an interpreter. "My mindset was just to attack the hitter. I wanted to get ahead in the count."
SOUND SMART Herrera extended his on-base streak to a career-best 43 games with a walk in the fourth. It is the fifth longest on-base streak in Phillies history trailing only Mike Schmidt (56 games), Chuck Klein (49 and 44) and Bobby Abreu (48), and it is the longest on-base streak in the majors since 2016 when Atlanta's Freddie Freeman reached in 46 straight.
"I don't try to pay attention to that," Herrera said. "I'm just trying to play hard, get on base and do what I do to help us win."
HE SAID IT "I think he's among the most entertaining players in baseball. Taking the big swing, the helmet comes off. The random auto-takes where he just kind of sees the pitch before it even comes out of the pitcher's hand. It's really kind of cool to watch." -- Kapler, on Herrera
UP NEXT Jake Arrieta (3-1, 2.59 ERA) will get the start in the second game of a four-game set against the Cardinals, who counter with Michael Wacha (4-1, 3.09 ERA) on Friday at 8:15 p.m. ET. Arrieta, who was born in Farmington, Mo., 70 miles south of St. Louis, is 8-4 with a 2.27 ERA in 17 career starts against the Cardinals.
Joe Harris is a contributor to MLB.com based in St. Louis.