Search code examples
javascriptcharacter-encodingasciiconvertersslug

Convert non-ASCII characters (umlauts, accents...) to their closest ASCII equivalent (for slug creation)


I am looking for way in JavaScript to convert non-ASCII characters in a string to their closest equivalent, similarly to what the PHP iconv function does. For instance if the input string is Rånades på Skyttis i Ö-vik, it should be converted to Ranades pa skyttis i o-vik. I had a look at phpjs but iconv isn't included.

Is it possible to perform such conversion in JavaScript, if so how?

Notes:

  • more generally this process of conversion is called transliteration
  • my use-case is the creation of URL slugs

Solution

  • The easiest way I've found:

    var str = "Rånades på Skyttis i Ö-vik";
    var combining = /[\u0300-\u036F]/g; 
    
    console.log(str.normalize('NFKD').replace(combining, ''));
    

    For reference see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize