diff --git a/src/browser/tests/document/query_selector.html b/src/browser/tests/document/query_selector.html index 91675b82..96179ede 100644 --- a/src/browser/tests/document/query_selector.html +++ b/src/browser/tests/document/query_selector.html @@ -270,3 +270,27 @@ testing.expectEqual('rect', document.querySelector('svg g rect').tagName); } + + + +
Non-ASCII class 1
+
Non-ASCII class 2
+Non-ASCII ID 1 +

Non-ASCII ID 2

+ + diff --git a/src/browser/webapi/selector/Parser.zig b/src/browser/webapi/selector/Parser.zig index a594f66f..fbedf17f 100644 --- a/src/browser/webapi/selector/Parser.zig +++ b/src/browser/webapi/selector/Parser.zig @@ -237,8 +237,9 @@ fn parsePart(self: *Parser, arena: Allocator, page: *Page) !Part { }, '[' => .{ .attribute = try self.attribute(arena, page) }, ':' => .{ .pseudo_class = try self.pseudoClass(arena, page) }, - 'a'...'z', 'A'...'Z', '_' => blk: { - const tag_name = try self.tag(); + 'a'...'z', 'A'...'Z', '_', '\\', 0x80...0xFF => blk: { + // Use parseIdentifier for full escape support + const tag_name = try self.parseIdentifier(arena, error.InvalidTagSelector); if (tag_name.len > 256) { return error.InvalidTagSelector; }