The problem is illustrated as such:
The moving object "sinks" into the ground slightly. This may be gravity, this may be slight errors in precision, it doesn't matter.
While moving right, the bottom of the player collides with the vertical edge of the right tile, catching so to speak on its corner.
The fix is to remove this internal edge. Since the moving object can't be between two tiles, that edge is irrelevant. The only edges that the moving object can collide with are external edges, such as the top edge in this example.
You generally need to post-process your tile map to identify these edges. You can easily examine each tile to see what neighbors it has, telling you if any edge is external (no adjacent tile on that side) or internal/hidden (adjacent tile on that side).
If you write your own simple physics, you can then only check agsinst edges that have the external flag set.
For Box2D, there is something called an Edge Shape and edge chains. You will need to find all external edges and connect them (start with any external edge and then find the next external edge sharing a vertex, until it loops) and build an edge chain accordingly. This is how Box2D deals with this case.
Note that when connecting edges, you may run into a case where a single vertex is shared by more than two edges, like so:
You want to ensure that the edges with the blue normals are connected, and edges with red normals are connected, but never with the edge with a different color. If you get a list of all edges sharing a vertex, pick the edge on the "other" tile (which you'd do anyway even when only two edges share a vertex, to avoid picking yourself). Then pick the edge who's normal is not your normal in the opposite direction (that can't happen in a sane world, it geometrically makes no sense). That edge is the one you want join with.