Anteriormente hice una pregunta sobre cómo usar expresiones regulares para desinfectar una cadena que se usará en una URL. El código que estoy usando en mi API es este:
const newPost = new Post({ category: req.body.category, user: req.body.user, title: req.body.title, content: req.body.content, shadowBanned: req.body.shadowBanned, community: req.body.community, categoryMeta: req.body.categoryMeta, image: req.body.imageUrl, externalLink: req.body.link, urlHash: req.body.title .replace(/(\s|-)/g, '_') .normalize('NFKD') .replace(/\W/g, '') .toLowerCase(), postUrl: req.body.community + '/c/' + req.body.category + '/p/' + req.body.title .replace(/(\s|-)/g, '_') .normalize('NFKD') .replace(/\W/g, '') .toLowerCase(), source: req.body.link ? new URL(req.body.link).hostname.replace('www.', '') : '', });La expresión regular en urlHash y postUrl funciona bien con los idiomas occidentales, generará cadenas formateadas como esp/c/CategoryName/ThisIsMyTitleWithoutSymbolsAndSpaces (juego de palabras con el título pensado para fines de lectura), pero cuando se trata de usar caracteres japoneses o coreanos, ese título estará vacío o dejado con algunos caracteres, aquí hay un ejemplo:
const text = '「Apex Legends」次期大型アップデート“デファイアンス”のローンチトレイラーが公開に' // will output apex_legendsSi hay algún otro carácter occidental, el código replace() simplemente borrará todo.
¿Hay alguna forma de evitar esto o necesito usar una condición diferente si el idioma es igual a cualquier otro idioma no occidental? Me encantaría no usar condicionales.
No creo que sea un problema usar caracteres japoneses en la URL, sino símbolos.