England skrum-halv Danny Care krävde en hatt-trick, medan lös framåt Luke Wallace korsade två gånger när Quins bokade en hem semi-final mot Grenoble.
Men Quins blev riktigt skrämd, och tog inte tillbaka ledningen förrän sent.
Irish sprang i tre försök genom ytter Fergus Mulchrone, scrum-halv Brendan McKibbin och centrum Sean Maitland.
Och besökarna satte i en uppvisning som bådar gott inför nästa helgs 11:e v 12:e nedflyttningsstrid vid Newcastle.
Irish och Quins kommer att träffas igen på Madejski Stadium söndagen den 1 maj, den näst sista helgen för säsongen.
Men Exiles står först inför ett ännu mer avgörande test nästa helg i det där krismötet med Falcons på den konstgjorda planen i Kingston Park.
Grenoble nådde de sista fyra med en 33-32 seger över Connaght, medan Montpellier, som slog Sale på fredag kväll, kommer att spela Newport Gwent Dragons, som sätter ut innehavare Gloucester, i den andra semin.
Harlequins mot Grenoble (Stopen)
Montpellier mot Newport Gwent Dragons (Altrad Stadium)
Matcher som ska spelas den 22/23/24 april
Harlequins chef för rugby Conor O'Shea:
"Vi tar resultatet. Vi är i en semifinal. Vi är den enda engelska sidan kvar i tävlingen. Vi fick 20 obesvarade poäng för att komma tillbaka från 30-18 ner.
"Vi var ganska inkonsekventa och det är den läxa vi måste lära oss. Vi var upp mot en stolt uppsättning spelare och de skulle inte rulla över
"De hade friheten att spela och vi hade förmodligen den lilla vikten av förväntan. Det var upp och ner, men vi fick några avgörande poäng när trycket var på. "
Irländska assistenten Clark Laidlaw sa till BBC Radio Berkshire:
"Vi är verkligen stolta över hur spelarna gjorde. Det skulle alltid bli en svår uppgift att komma hit. Harlequins är en ganska stark sida som har spelat bra under hela året.
"Vi fick våra näsor framför oss och om vi hade kunnat hålla kvar där lite längre när vi var två poäng upp, kunde det ha varit en annan kväll.
"Men, vi är enormt stolta över hur pojkarna spelade och vi hoppas verkligen att de kan spela med den friheten under de veckor som kommer före säsongens slut."
Harlequins: Brown; Yarde, Lowe, Roberts, Visser; Botica, Care (capt); Lambert, Gray, A Jones, Merrick, Twomey, Robshaw, Wallace, Clifford.
Ersättningar: Ward, O Evans, Sinckler, Matthews, Luamanu, Dickson, Marchant, Chisholm.
London Irish: Fenby; Maitland, Mulchrone, Brophy-Clews, Fowlie; Geraghty, McKibbin; Smallbone, Paice (kapt), Halavatau, Lloyd, Sinclair, Guest, Trayfoot, McCusker.
Ersättningar: Cruse, Court, Palframan, Curry, Sisi, Ellis, Allinson, Steele.
Domare: Marius Mitrea (Italien).
Harlequins sprang i fem försök som de kom bakifrån för att slå London Irish i European Challenge Cup kvartsfinal på hemmaplan på The Stoop.