Brock Boeser scored for Vancouver (24-23-6), which is 4-2-2 in its past eight games. Jacob Markstrom made 28 saves.
"I thought we played a [heck] of a game," Canucks coach Travis Green said. "Sometimes you play great games and you lose. That was one of our better games of the year."
Vancouver defenseman Alexander Edler was taken off on a stretcher with 10:22 remaining in the third period. His stick got stuck in Voracek's skates, pulling Edler face-first onto the ice. He was taken for X-rays for possible facial fractures. Green said he did not know how long Edler could be out.
Couturier gave Philadelphia a 1-0 lead when he scored a power-play goal with 1:23 left in the first period. He got the puck at the left hash marks and beat Markstrom to the far side past his glove.
Voracek made it 2-0 at 3:20 of the second period. Canucks defenseman Chris Tanev turned over the puck at the Flyers blue line, and Phil Varone sent Voracek in alone on Markstrom. Voracek dragged the puck around a lunging Markstrom and scored.
Boeser scored to make it 2-1 at 5:14. Hart skated into the right face-off circle to play a long Canucks pass, but his chip off the wall went to Boeser, who scored into an open net.
Hart made 18 saves in the third period, including a diving play to deny Nikolay Goldobin from the left side with 5:36 remaining.
"I just kind of saw the play bounce out to that guy on the side," Hart said. "Just dove across and hoped it would hit me, and it did."
Boeser said he almost started to celebrate.
"That's another heck of a save by him," he said. "It's a game of inches, and that's how it was tonight."
Hart has provided a noticeable lift to the Flyers since being recalled from Lehigh Valley of the American Hockey League on Dec. 17.
"He's been remarkable," Couturier said. "That save [on Goldobin], he's making some almost miracles out there."