diff --git a/.changeset/uppercase-hex-entities.md b/.changeset/uppercase-hex-entities.md
new file mode 100644
index 0000000000..e6e13d5df5
--- /dev/null
+++ b/.changeset/uppercase-hex-entities.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: decode uppercase-`X` hex numeric character references (`...;`)
diff --git a/packages/svelte/src/compiler/phases/1-parse/utils/html.js b/packages/svelte/src/compiler/phases/1-parse/utils/html.js
index a0c2a5b06f..1d660298c7 100644
--- a/packages/svelte/src/compiler/phases/1-parse/utils/html.js
+++ b/packages/svelte/src/compiler/phases/1-parse/utils/html.js
@@ -20,7 +20,7 @@ function reg_exp_entity(entity_name, is_attribute_value) {
/** @param {boolean} is_attribute_value */
function get_entity_pattern(is_attribute_value) {
- const reg_exp_num = '#(?:x[a-fA-F\\d]+|\\d+)(?:;)?';
+ const reg_exp_num = '#(?:[xX][a-fA-F\\d]+|\\d+)(?:;)?';
const reg_exp_entities = Object.keys(entities).map(
/** @param {any} entity_name */ (entity_name) => reg_exp_entity(entity_name, is_attribute_value)
);
@@ -50,7 +50,7 @@ export function decode_character_references(html, is_attribute_value) {
// Handle named entities
if (entity[0] !== '#') {
code = entities[entity];
- } else if (entity[1] === 'x') {
+ } else if (entity[1] === 'x' || entity[1] === 'X') {
code = parseInt(entity.substring(2), 16);
} else {
code = parseInt(entity.substring(1), 10);
diff --git a/packages/svelte/tests/runtime-legacy/samples/html-entities/_config.js b/packages/svelte/tests/runtime-legacy/samples/html-entities/_config.js
index add763989e..82c87495c4 100644
--- a/packages/svelte/tests/runtime-legacy/samples/html-entities/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/html-entities/_config.js
@@ -7,6 +7,7 @@ export default test({
*
*
*
+ *
A
diff --git a/packages/svelte/tests/runtime-legacy/samples/html-entities/main.svelte b/packages/svelte/tests/runtime-legacy/samples/html-entities/main.svelte
index 2d0d66c939..25a60cb930 100644
--- a/packages/svelte/tests/runtime-legacy/samples/html-entities/main.svelte
+++ b/packages/svelte/tests/runtime-legacy/samples/html-entities/main.svelte
@@ -2,6 +2,7 @@
*
*
*
+*
*