Skip to content

Instantly share code, notes, and snippets.

@bauhouse
Created April 19, 2012 21:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bauhouse/2424449 to your computer and use it in GitHub Desktop.
Save bauhouse/2424449 to your computer and use it in GitHub Desktop.
Email Obfuscator
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str">
<!--
Name: E-mail Obfuscator
Version: 0.1
Author: Nick Dunn <nick@nick-dunn.co.uk>
URL: http://symphony-cms.com/downloads/xslt/file/20574/
Modified by Stephen Bau to use URL encoding
and decimal entities as well as hexadecimal entities
Parameters:
* email (required) an e-mail address
* type (optional)
- 'dec' = decimal
- 'hex' = hexadecimal
- 'url' = url-encoded (default)
-->
<xsl:template name="obfuscate-email">
<xsl:param name="email"/>
<xsl:param name="type" />
<xsl:variable name="encoded">
<xsl:for-each select="str:tokenize(translate($email,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'')">
<xsl:choose>
<xsl:when test="$type = 'dec'">
<xsl:text>&amp;#</xsl:text>
<xsl:choose>
<xsl:when test="text()='a'">97</xsl:when>
<xsl:when test="text()='b'">98</xsl:when>
<xsl:when test="text()='c'">99</xsl:when>
<xsl:when test="text()='d'">100</xsl:when>
<xsl:when test="text()='e'">101</xsl:when>
<xsl:when test="text()='f'">102</xsl:when>
<xsl:when test="text()='g'">103</xsl:when>
<xsl:when test="text()='h'">104</xsl:when>
<xsl:when test="text()='i'">105</xsl:when>
<xsl:when test="text()='j'">106</xsl:when>
<xsl:when test="text()='k'">107</xsl:when>
<xsl:when test="text()='l'">108</xsl:when>
<xsl:when test="text()='m'">109</xsl:when>
<xsl:when test="text()='n'">110</xsl:when>
<xsl:when test="text()='o'">111</xsl:when>
<xsl:when test="text()='p'">112</xsl:when>
<xsl:when test="text()='q'">113</xsl:when>
<xsl:when test="text()='r'">114</xsl:when>
<xsl:when test="text()='s'">115</xsl:when>
<xsl:when test="text()='t'">116</xsl:when>
<xsl:when test="text()='u'">117</xsl:when>
<xsl:when test="text()='v'">118</xsl:when>
<xsl:when test="text()='w'">119</xsl:when>
<xsl:when test="text()='x'">120</xsl:when>
<xsl:when test="text()='y'">121</xsl:when>
<xsl:when test="text()='z'">122</xsl:when>
<xsl:when test="text()='0'">48</xsl:when>
<xsl:when test="text()='1'">49</xsl:when>
<xsl:when test="text()='2'">50</xsl:when>
<xsl:when test="text()='3'">51</xsl:when>
<xsl:when test="text()='4'">52</xsl:when>
<xsl:when test="text()='5'">53</xsl:when>
<xsl:when test="text()='6'">54</xsl:when>
<xsl:when test="text()='7'">55</xsl:when>
<xsl:when test="text()='8'">56</xsl:when>
<xsl:when test="text()='9'">57</xsl:when>
<xsl:when test="text()='.'">46</xsl:when>
<xsl:when test="text()='!'">33</xsl:when>
<xsl:when test="text()='#'">35</xsl:when>
<xsl:when test="text()='$'">36</xsl:when>
<xsl:when test="text()='%'">37</xsl:when>
<xsl:when test="text()='*'">42</xsl:when>
<xsl:when test="text()='/'">47</xsl:when>
<xsl:when test="text()='='">61</xsl:when>
<xsl:when test="text()='?'">63</xsl:when>
<xsl:when test="text()='^'">94</xsl:when>
<xsl:when test="text()='_'">95</xsl:when>
<xsl:when test="text()='`'">96</xsl:when>
<xsl:when test="text()='{'">123</xsl:when>
<xsl:when test="text()='|'">124</xsl:when>
<xsl:when test="text()='}'">125</xsl:when>
<xsl:when test="text()='~'">126</xsl:when>
<xsl:when test="text()='+'">43</xsl:when>
<xsl:when test="text()='-'">45</xsl:when>
<xsl:when test="text()='@'">64</xsl:when>
</xsl:choose>
<xsl:text>;</xsl:text>
</xsl:when>
<xsl:when test="$type = 'hex'">
<xsl:text>&amp;#</xsl:text>
<xsl:choose>
<xsl:when test="text()='a'">x0061</xsl:when>
<xsl:when test="text()='b'">x0062</xsl:when>
<xsl:when test="text()='c'">x0063</xsl:when>
<xsl:when test="text()='d'">x0064</xsl:when>
<xsl:when test="text()='e'">x0065</xsl:when>
<xsl:when test="text()='f'">x0066</xsl:when>
<xsl:when test="text()='g'">x0067</xsl:when>
<xsl:when test="text()='h'">x0068</xsl:when>
<xsl:when test="text()='i'">x0069</xsl:when>
<xsl:when test="text()='j'">x006a</xsl:when>
<xsl:when test="text()='k'">x006b</xsl:when>
<xsl:when test="text()='l'">x006c</xsl:when>
<xsl:when test="text()='m'">x006d</xsl:when>
<xsl:when test="text()='n'">x006e</xsl:when>
<xsl:when test="text()='o'">x006f</xsl:when>
<xsl:when test="text()='p'">x0070</xsl:when>
<xsl:when test="text()='q'">x0071</xsl:when>
<xsl:when test="text()='r'">x0072</xsl:when>
<xsl:when test="text()='s'">x0073</xsl:when>
<xsl:when test="text()='t'">x0074</xsl:when>
<xsl:when test="text()='u'">x0075</xsl:when>
<xsl:when test="text()='v'">x0076</xsl:when>
<xsl:when test="text()='w'">x0077</xsl:when>
<xsl:when test="text()='x'">x0078</xsl:when>
<xsl:when test="text()='y'">x0079</xsl:when>
<xsl:when test="text()='z'">x007a</xsl:when>
<xsl:when test="text()='0'">x0030</xsl:when>
<xsl:when test="text()='1'">x0031</xsl:when>
<xsl:when test="text()='2'">x0032</xsl:when>
<xsl:when test="text()='3'">x0033</xsl:when>
<xsl:when test="text()='4'">x0034</xsl:when>
<xsl:when test="text()='5'">x0035</xsl:when>
<xsl:when test="text()='6'">x0036</xsl:when>
<xsl:when test="text()='7'">x0037</xsl:when>
<xsl:when test="text()='8'">x0038</xsl:when>
<xsl:when test="text()='9'">x0039</xsl:when>
<xsl:when test="text()='.'">x002e</xsl:when>
<xsl:when test="text()='!'">x0021</xsl:when>
<xsl:when test="text()='#'">x0023</xsl:when>
<xsl:when test="text()='$'">x0024</xsl:when>
<xsl:when test="text()='%'">x0025</xsl:when>
<xsl:when test="text()='*'">x002a</xsl:when>
<xsl:when test="text()='/'">x002f</xsl:when>
<xsl:when test="text()='='">x003d</xsl:when>
<xsl:when test="text()='?'">x003f</xsl:when>
<xsl:when test="text()='^'">x005e</xsl:when>
<xsl:when test="text()='_'">x005f</xsl:when>
<xsl:when test="text()='`'">x0060</xsl:when>
<xsl:when test="text()='{'">x007b</xsl:when>
<xsl:when test="text()='|'">x007c</xsl:when>
<xsl:when test="text()='}'">x007d</xsl:when>
<xsl:when test="text()='~'">x007e</xsl:when>
<xsl:when test="text()='+'">x002b</xsl:when>
<xsl:when test="text()='-'">x002d</xsl:when>
<xsl:when test="text()='@'">x0040</xsl:when>
</xsl:choose>
<xsl:text>;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="text()='a'">%61</xsl:when>
<xsl:when test="text()='b'">%62</xsl:when>
<xsl:when test="text()='c'">%63</xsl:when>
<xsl:when test="text()='d'">%64</xsl:when>
<xsl:when test="text()='e'">%65</xsl:when>
<xsl:when test="text()='f'">%66</xsl:when>
<xsl:when test="text()='g'">%67</xsl:when>
<xsl:when test="text()='h'">%68</xsl:when>
<xsl:when test="text()='i'">%69</xsl:when>
<xsl:when test="text()='j'">%6a</xsl:when>
<xsl:when test="text()='k'">%6b</xsl:when>
<xsl:when test="text()='l'">%6c</xsl:when>
<xsl:when test="text()='m'">%6d</xsl:when>
<xsl:when test="text()='n'">%6e</xsl:when>
<xsl:when test="text()='o'">%6f</xsl:when>
<xsl:when test="text()='p'">%70</xsl:when>
<xsl:when test="text()='q'">%71</xsl:when>
<xsl:when test="text()='r'">%72</xsl:when>
<xsl:when test="text()='s'">%73</xsl:when>
<xsl:when test="text()='t'">%74</xsl:when>
<xsl:when test="text()='u'">%75</xsl:when>
<xsl:when test="text()='v'">%76</xsl:when>
<xsl:when test="text()='w'">%77</xsl:when>
<xsl:when test="text()='x'">%78</xsl:when>
<xsl:when test="text()='y'">%79</xsl:when>
<xsl:when test="text()='z'">%7a</xsl:when>
<xsl:when test="text()='0'">%30</xsl:when>
<xsl:when test="text()='1'">%31</xsl:when>
<xsl:when test="text()='2'">%32</xsl:when>
<xsl:when test="text()='3'">%33</xsl:when>
<xsl:when test="text()='4'">%34</xsl:when>
<xsl:when test="text()='5'">%35</xsl:when>
<xsl:when test="text()='6'">%36</xsl:when>
<xsl:when test="text()='7'">%37</xsl:when>
<xsl:when test="text()='8'">%38</xsl:when>
<xsl:when test="text()='9'">%39</xsl:when>
<xsl:when test="text()='.'">%2e</xsl:when>
<xsl:when test="text()='!'">%21</xsl:when>
<xsl:when test="text()='#'">%23</xsl:when>
<xsl:when test="text()='$'">%24</xsl:when>
<xsl:when test="text()='%'">%25</xsl:when>
<xsl:when test="text()='*'">%2a</xsl:when>
<xsl:when test="text()='/'">%2f</xsl:when>
<xsl:when test="text()='='">%3d</xsl:when>
<xsl:when test="text()='?'">%3f</xsl:when>
<xsl:when test="text()='^'">%5e</xsl:when>
<xsl:when test="text()='_'">%5f</xsl:when>
<xsl:when test="text()='`'">%60</xsl:when>
<xsl:when test="text()='{'">%7b</xsl:when>
<xsl:when test="text()='|'">%7c</xsl:when>
<xsl:when test="text()='}'">%7d</xsl:when>
<xsl:when test="text()='~'">%7e</xsl:when>
<xsl:when test="text()='+'">%2b</xsl:when>
<xsl:when test="text()='-'">%2d</xsl:when>
<xsl:when test="text()='@'">%40</xsl:when>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$encoded" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment