The default url-title.vtl is ASCII-only: any characters that are not letters of the English alphabet (or a digit or a hyphen) are discarded. This version allows you to specify your alphabet, and if no alphabet is specified then it URLencodes every character. This is ugly but reversible.
#set($cusFieldVarName="title") #set($currentAlphabet = "") ## No default alphabet: just URLencode everything ##set($currentAlphabet = "a-zA-Z") ## English alphabet ##set($currentAlphabet = "[\u0400-\u052F]") ## Cyrillic alphabet and supplement, per http://en.wikipedia.org/wiki/Cyrillic_script_in_Unicode ## For more Unicode code points, see http://kourge.net/projects/regexp-unicode-block <script> "use strict"; function updateDisplayURLTitle(){ // get the title entered by the user var plainTitle = dojo.byId("$cusFieldVarName"); if(plainTitle == undefined || plainTitle.value.length ==0){ dojo.byId("displayURLTitle").innerHTML = ""; dojo.byId("urlTitle").value=""; }else{ // make a friendly url var urlTitle = plainTitle.value.replace(/\s+/g,"-"); // Replace whitespace with hyphens urlTitle = urlTitle.replace(/-{2,}/g,"-"); // Replace sequences of hyphens with a single hyphen urlTitle = urlTitle.toLowerCase(); // This line is optional. It does respect locale which is nice: the lowercase version of "I", for instance, is different in English and Turkish #if($UtilMethods.isSet($currentAlphabet)) urlTitle = urlTitle.replace(/[^${currentAlphabet}0-9-]/g , ""); // Strip out everything other than letters in the current alphabet, digits, and hyphens urlTitle = urlTitle.replace(/^-|-$/g,""); // Eliminate leading and trailing hyphens AFTER stripping #else urlTitle = urlTitle.replace(/^-|-$/g,""); // Eliminate leading and trailing hyphens BEFORE encoding urlTitle = encodeURIComponent(urlTitle); // If no alphabet is specified then encode reserved ASCII characters and all non-ASCII characters #end // set the values of the display place holder and the custom field dojo.byId("displayURLTitle").innerHTML = urlTitle; dojo.byId("urlTitle").value=urlTitle; } } // attach this the text1 field onchange dojo.addOnLoad(function(){ dojo.connect(dojo.byId("$cusFieldVarName"), "onchange", null, "updateDisplayURLTitle"); }); // populate the field on load dojo.addOnLoad(updateDisplayURLTitle); </script> <div id="displayURLTitle" style="height:20px"> </div>