As a youth, Weber played in the 2002 Quebec International Pee-Wee Hockey Tournament with a team from Central Switzerland. Weber began his professional hockey career in his native Switzerland playing for SC Langenthal of the National League B, the second-highest tier of Swiss hockey. However, he moved to Canada in 2006 to develop his game with the Kitchener Rangers of the Ontario Hockey League. In two seasons with the Rangers, Weber scored 96 points and added 26 more in the playoffs. In 2007–08, his last season with the Rangers, he helped the team to their fourth J. Ross Robertson Cup championship and to the final of the Memorial Cup championship. The Canadiens signed Weber to a three-year entry-level contract in the summer of 2008. He spent the majority of the next two seasons with the Hamilton Bulldogs, the Canadiens' American Hockey League affiliate, with his strong play earning him limited action with Montreal and a spot in the 2009 AHL All-Star Game.
Montreal Canadiens
Weber scored his first career NHL goal during the 2009 playoffs, 20 April against Tim Thomas of the Boston Bruins. Weber scored his first NHL regular season goal on 9 February 2011, also against Tim Thomas. Weber contributed two goals during the Canadiens' first round 2011 playoff series against the Boston Bruins, both times beating Tim Thomas. On 9 October 2011, Weber scored a power play goal against the Winnipeg Jets contributing to a 5–1 Canadiens win in Winnipeg's first regular season game since 1996.
On July 5, 2013, he signed a one-year deal with the Vancouver Canucks after not being qualified as a restricted free agent by the Canadiens. In the 2014–15 NHL season, Weber set a career-high record in goals with 11. He scored five of those 11 in the final 11 games of the season; 4 of which were on the powerplay. On 1 July 2015, he re-signed with the Canucks to a one-year deal worth $1.5 million. After struggling in the 2015–16 NHL season, The Canucks waived and subsequently assigned him to the Utica Comets in February 2016. However, due to a season-ending injury to Alexander Edler, he was recalled just a few days later before playing any games for the Comets. He would finish the season with the Canucks but did not appear in many games after this point.
Nashville Predators
On July 1, 2016, Weber left the Canucks after three seasons, signing a one-year contract as a free agent with the Nashville Predators. On June 6, 2017, it was announced that Weber had turned down offers from Geneva and Lugano -that would have paid him more than CHF1.7 million a year over multiple seasons- to pursue his NHL career. On June 13, 2017, the Predators signed Weber to a one-year contract extension worth $650,000. After appearing in 26 games for the club, the Predators re-signed Weber to a two-year, $1.35 million contract worth $675,000 annually.