File tree Expand file tree Collapse file tree 2 files changed +14
-18
lines changed
Expand file tree Collapse file tree 2 files changed +14
-18
lines changed Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ import sanitizeHtml from 'sanitize-html'
33import { hasProtocol } from 'ufo'
44import type { ReadmeResponse , TocItem } from '#shared/types/readme'
55import { convertBlobOrFileToRawUrl , type RepositoryInfo } from '#shared/utils/git-providers'
6- import { decodeHtmlEntities } from '#shared/utils/html'
6+ import { decodeHtmlEntities , stripHtmlTags } from '#shared/utils/html'
77import { convertToEmoji } from '#shared/utils/emoji'
88import { toProxiedImageUrl } from '#server/utils/image-proxy'
99
@@ -194,22 +194,6 @@ const ALLOWED_ATTR: Record<string, string[]> = {
194194 'p' : [ 'align' ] ,
195195}
196196
197- /**
198- * Strip all HTML tags from a string, looping until stable to prevent
199- * incomplete sanitization from nested/interleaved tags
200- * (e.g. `<scr<script>ipt>` → `<script>` after one pass).
201- */
202- function stripHtmlTags ( text : string ) : string {
203- const tagPattern = / < [ ^ > ] * > / g
204- let result = text
205- let previous : string
206- do {
207- previous = result
208- result = result . replace ( tagPattern , '' )
209- } while ( result !== previous )
210- return result
211- }
212-
213197/**
214198 * Generate a GitHub-style slug from heading text.
215199 * - Convert to lowercase
Original file line number Diff line number Diff line change @@ -12,6 +12,18 @@ export function decodeHtmlEntities(text: string): string {
1212 return text . replace ( / & (?: a m p | l t | g t | q u o t | a p o s | n b s p | # 3 9 ) ; / g, match => htmlEntities [ match ] || match )
1313}
1414
15+ /**
16+ * Strip all HTML tags from a string, looping until stable to prevent
17+ * incomplete sanitization from nested/interleaved tags
18+ * (e.g. `<scr<script>ipt>` → `<script>` after one pass).
19+ */
1520export function stripHtmlTags ( text : string ) : string {
16- return text . replace ( / < [ ^ > ] * > / g, '' )
21+ const tagPattern = / < [ ^ > ] * > / g
22+ let result = text
23+ let previous : string
24+ do {
25+ previous = result
26+ result = result . replace ( tagPattern , '' )
27+ } while ( result !== previous )
28+ return result
1729}
You can’t perform that action at this time.
0 commit comments