Things looked bleak for the Azzurri, who had gone behind to Patson Daka's early goal, when Giuseppe Pezzella was sent off for a shove following a video review just before half-time.
But Riccardo Orsolini scored five minutes after the restart and even when Fashion Sakala struck in the 84th minute, substitute Federico Dimarco's 88th-minute free kick sent the game into extra time.
Kenneth Kalunga narrowly missed after skilfully juggling the ball past Italy's defence, before another Italian substitute, Luca Vido, headed the decisive goal from a Dimarco corner in the 110th minute.
The late strike finally knocked out Zambia, who stunned Germany in the round of 16, and sent last year's U19 European finalists into a meeting with England, who downed Mexico 1-0.
Dominic Solanke, who is Liverpool-bound after coming through the ranks at Chelsea, scored just after half-time but England had to survive a nervy finish when Josh Onomah received his second yellow card with 18 minutes left.
Thursday's other semi-final will be between Uruguay, who edged Portugal 5-4 on penalties, and Venezuela, who beat the United States 2-1 after extra time in another tight game on Sunday.