<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: url code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 18 May 2008 15:58:22 GMT</pubDate>
    <description>DZone Snippets: url code</description>
    <item>
      <title>Extract the filename from a URL</title>
      <link>http://snippets.dzone.com/posts/show/5407</link>
      <description>This ECMAScript extracts the filename from a URL. eg. the filename 'index4.svg' would be extracted from the document.URL with the value 'http://rorbuilder.info/r/whiteboardqueue/index4.svg'.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var regexp = /(\w|[-.])+$/&lt;br /&gt;str = document.URL&lt;br /&gt;a = regexp.exec(str)&lt;br /&gt;alert(a[0])&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reference: &lt;a href="http://www.webreference.com/js/column5/methods.html"&gt;Regular Expressions: Methods - Doc JavaScript&lt;/a&gt; [webreference.com]</description>
      <pubDate>Sun, 20 Apr 2008 15:24:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5407</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Ruby: Escape, Unescape, Encode, Decode, HTML, XML, URI, URL</title>
      <link>http://snippets.dzone.com/posts/show/5180</link>
      <description>This example will show you how to escape and un-escape a value to be included in a URI and within HTML. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'cgi'&lt;br /&gt;&lt;br /&gt;# escape&lt;br /&gt;name = "ruby?"&lt;br /&gt;value = "yes"&lt;br /&gt;url = "http://example.com/?" + CGI.escape(name) + '=' + CGI.escape(value) + "&amp;var=T"&lt;br /&gt;# url: http://example.com/?ruby%3F=yes&amp;var=T&lt;br /&gt;html = %(&lt;a href="#{CGI.escapeHTML(url)}"&gt;example&lt;/a&gt;)&lt;br /&gt;# html: &lt;a href="http://example.com/?ruby%3F=yes&amp;amp;var=T"&gt;example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;# unescape&lt;br /&gt;name_encoded = html.match(/http:([^"]+)/)[0]&lt;br /&gt;# name_encoded: http://example.com/?ruby%3F=yes&amp;amp;var=T&lt;br /&gt;href = CGI.unescapeHTML(name_encoded)&lt;br /&gt;# href: http://example.com/?ruby%3F=yes&amp;var=T&lt;br /&gt;query = href.match(/\?(.*)$/)[1]&lt;br /&gt;# query: ruby%3F=yes&amp;var=T&lt;br /&gt;pairs = query.split('&amp;')&lt;br /&gt;# pairs: ["ruby%3F=yes", "var=T"]&lt;br /&gt;name, value = pairs[0].split('=').map{|v| CGI.unescape(v)}&lt;br /&gt;# name, value: ["ruby?", "yes"]&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 26 Feb 2008 23:23:08 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5180</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>Generate short URLs using Ruby</title>
      <link>http://snippets.dzone.com/posts/show/5140</link>
      <description>This Ruby code generates shortened URLs. It has the added feature that it will not allow words to be created accidentally  eg. swear words.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;&lt;br /&gt;class ShortUrl&lt;br /&gt;  def initialize()&lt;br /&gt;    @chars = ('a'..'z').to_a + ('1'..'9').to_a + ('A'..'Z').to_a&lt;br /&gt;    @array_size = @chars.size&lt;br /&gt;    @h = Hash.new&lt;br /&gt;    @chars.each {|c| @h[c] = '0'}&lt;br /&gt;    vowels = %w(a e i o u A E I O U 4 3 1 0)&lt;br /&gt;    vowels.each {|v| @h[v] = '1'}&lt;br /&gt;    nums = %w(2 5 6 7 8 9)&lt;br /&gt;    nums.each {|n| @h[n] = '2'}&lt;br /&gt;    @count = 0&lt;br /&gt;    @a = Array.new(7, -1)&lt;br /&gt;    @k = 0&lt;br /&gt;  end &lt;br /&gt;&lt;br /&gt;  def iterate_chars(array_size)&lt;br /&gt;    (0..array_size).each {|i| &lt;br /&gt;      increment_index(@k)&lt;br /&gt;      convert_to_chars()&lt;br /&gt;    }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def convert_to_chars()&lt;br /&gt;    buffer = ''&lt;br /&gt;    @a.each {|i|&lt;br /&gt;      buffer &lt;&lt; @chars[i] if i &gt;= 0&lt;br /&gt;    }&lt;br /&gt;    a = buffer.reverse.scan(/./)&lt;br /&gt;    k = a.length  &lt;br /&gt;    if  (k &gt; 1)  &lt;br /&gt;      if ((@h[a[k-2]] + @h[a[k-1]]) != '10')&lt;br /&gt;        puts buffer.reverse &lt;br /&gt;      end&lt;br /&gt;    else&lt;br /&gt;      puts buffer.reverse&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def get_short_url(count)&lt;br /&gt;    if count &gt;  @array_size&lt;br /&gt;      new_count = count - @array_size&lt;br /&gt;      iterate_chars(@array_size)&lt;br /&gt;      get_short_url(new_count)&lt;br /&gt;    else&lt;br /&gt;      iterate_chars(count)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def increment_a(i)&lt;br /&gt;    if @a[i] &lt; @array_size - 1&lt;br /&gt;      @a[i] = @a[i] + 1&lt;br /&gt;      return i &lt;br /&gt;    else&lt;br /&gt;      @a[i] = 0&lt;br /&gt;      return i += 1&lt;br /&gt;    end &lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def increment_index(k)&lt;br /&gt;    old_k = k&lt;br /&gt;    k = increment_a(k)&lt;br /&gt;    &lt;br /&gt;    if k != old_k&lt;br /&gt;      increment_index(k)&lt;br /&gt;    else&lt;br /&gt;      k = 0&lt;br /&gt;    end&lt;br /&gt;    k&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;  su = ShortUrl.new  &lt;br /&gt;  su.get_short_url(222761)&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: You will most likely see the " `convert_to_chars': stack level too deep (SystemStackError)" error message after around 253950 iterations, I'm presuming this is expected due to the memory constraints of the language. However 253k short urls is enough for linking my website to itself.&lt;br /&gt;</description>
      <pubDate>Thu, 14 Feb 2008 05:00:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5140</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>spaces in URL</title>
      <link>http://snippets.dzone.com/posts/show/4978</link>
      <description>This is a workaround to get spaces in URL as pluses not %20 like it is in Rails2.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;module ActionController::Routing&lt;br /&gt;  class DynamicSegment&lt;br /&gt;    def interpolation_chunk&lt;br /&gt;      "\#{CGI.escape(#{local_name}.to_s)}"&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def match_extraction(next_capture)&lt;br /&gt;      default_value = default ? default.inspect : nil&lt;br /&gt;      %[&lt;br /&gt;        value = if (m = match[#{next_capture}])&lt;br /&gt;          CGI.unescape(m)&lt;br /&gt;        else&lt;br /&gt;          #{default_value}&lt;br /&gt;        end&lt;br /&gt;        params[:#{key}] = value if value&lt;br /&gt;      ]&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 13 Jan 2008 15:45:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4978</guid>
      <author>kelyar (Kelyarsky Evgeniy)</author>
    </item>
    <item>
      <title>Using Apache with RewriteMap and a text file</title>
      <link>http://snippets.dzone.com/posts/show/4699</link>
      <description>This code will read a text file using Apache then upon a user request, look for a url containing /l/ eg. http://mysite.com/l/digg and rewrite the URL in full eg. http://mysite.com/gwd/feed/digg.html . The example file is shown here for completeness.&lt;br /&gt;&lt;br /&gt;RewriteMap uses a text file as a convenient alternative for the administrator when declaring many rewrite rules. Code based on the article from ONLamp.com -  A Day in the Life of #Apache http://urltea.com/1vwb&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;file name="links.txt" location="/var/www/localhost/"&gt;&lt;br /&gt;scotsman /gwd/feed/scotsman.html&lt;br /&gt;digg /gwd/feed/digg.html&lt;br /&gt;&lt;/file&gt;&lt;br /&gt;&lt;br /&gt;&lt;IfModule mod_rewrite.c&gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;RewriteMap links txt:/var/www/localhost/links.txt&lt;br /&gt;RewriteRule ^/l/(.*) ${links:$1|http://mysite.com/} [R]&lt;br /&gt;&lt;/IfModule&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: The [R] at the end of RewriteRule means redirect, to have a clean url simply remove that switch.&lt;br /&gt;&lt;br /&gt;*update 15-Feb-08 *&lt;br /&gt;Restart Apache rather reloading the module when switching redirection on or off for a RewriteRule.  The Apache version 2.2.6 (Unix) didn't pick up my settings correctly when I tried /etc/init.d/apache2 reload, instead I needed to use /etc/init.d/apache2 restart.</description>
      <pubDate>Thu, 25 Oct 2007 22:51:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4699</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>A simple mod_rewrite example</title>
      <link>http://snippets.dzone.com/posts/show/4694</link>
      <description>Rewrite a long url as a short easy to remember url with mod_rewrite. Place this code in httpd.conf or the virtual hosts file. Original code from sitepoint - mod_rewrite: A Beginner's Guide to URL Rewriting http://urltea.com/1v6d .&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;IfModule mod_rewrite.c&gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;RewriteRule ^/shortcut$ /complicated/and/way/too/long/url/here&lt;br /&gt;&lt;/IfModule&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 24 Oct 2007 09:11:02 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4694</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Create strings for SEO-friendly URLs</title>
      <link>http://snippets.dzone.com/posts/show/4579</link>
      <description>this method returns string, which is perfect for SEO-friendly URLs. &lt;br /&gt;&lt;br /&gt;features: &lt;br /&gt;- converts every improper character to a hyphen&lt;br /&gt;- returns a lowercase string&lt;br /&gt;&lt;br /&gt;I POSTED AN EVEN BETTER METHOD ON MY BLOG: http://tinyurl.com/2vurbq&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def create_callname (title)&lt;br /&gt;	title.downcase.gsub(/[^a-z0-9]+/i, '-')&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 27 Sep 2007 11:53:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4579</guid>
      <author>labuschin (Martin Labuschin)</author>
    </item>
    <item>
      <title>Rails URL Validation</title>
      <link>http://snippets.dzone.com/posts/show/4532</link>
      <description>No regexes, allows URLs with ports or IPs. Inspiration from &lt;a href="http://actsasblog.wordpress.com/2006/10/16/url-validation-in-rubyrails/"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  validates_each :href, :on =&gt; :create do |record, attr, value|&lt;br /&gt;    begin&lt;br /&gt;      uri = URI.parse(value)&lt;br /&gt;      if uri.class != URI::HTTP&lt;br /&gt;        record.errors.add(attr, 'Only HTTP protocol addresses can be used')&lt;br /&gt;      end&lt;br /&gt;    rescue URI::InvalidURIError&lt;br /&gt;      record.errors.add(attr, 'The format of the url is not valid.')&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 12 Sep 2007 14:03:00 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4532</guid>
      <author>jnewland (Jesse Newland)</author>
    </item>
    <item>
      <title>Reading an xml file from a URL and  saving it locally</title>
      <link>http://snippets.dzone.com/posts/show/4512</link>
      <description>// description of your code here&lt;br /&gt;This code reads an xml file, modifys an element and saves the file locally. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'rexml/document'&lt;br /&gt;&lt;br /&gt;url = 'http://www.example.com/journal080907.xml'&lt;br /&gt;&lt;br /&gt;element_name = ARGV[0] # basic_category&lt;br /&gt;xpath = ARGV[1] # eg.'entries/entry'&lt;br /&gt;file = ARGV[2] # eg. 'journal080907.xml'&lt;br /&gt;element_value = ARGV[3] # 'ruby'&lt;br /&gt;&lt;br /&gt;file = File.new(file,'w')&lt;br /&gt;# get the XML data as a string&lt;br /&gt;xml_data = Net::HTTP.get_response(URI.parse(url)).body&lt;br /&gt;&lt;br /&gt;# extract event information&lt;br /&gt;doc = REXML::Document.new(xml_data)&lt;br /&gt;docx = doc&lt;br /&gt;&lt;br /&gt;node = docx.elements[xpath]&lt;br /&gt;element = node.elements[element_name]&lt;br /&gt;puts element.text&lt;br /&gt;element.text = 'ruby'&lt;br /&gt;file.puts docx&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 08 Sep 2007 14:20:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4512</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>ISAPI URL Rewrite</title>
      <link>http://snippets.dzone.com/posts/show/4225</link>
      <description>// description of your code here&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;httpfilt.h&gt;&lt;br /&gt;&lt;br /&gt;#define MAX_URL_LEN 4096&lt;br /&gt;&lt;br /&gt;BOOL WINAPI GetFilterVersion(HTTP_FILTER_VERSION * pVer)&lt;br /&gt;{&lt;br /&gt;      pVer-&gt;dwFlags = (SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_ORDER_HIGH);&lt;br /&gt;      pVer-&gt;dwFilterVersion = HTTP_FILTER_REVISION;&lt;br /&gt;      strcpy_s(pVer-&gt;lpszFilterDesc,9,"Blah blah blah");&lt;br /&gt;      return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ReMapURLs(CHAR* pUrl,HTTP_FILTER_CONTEXT* pfc,PHTTP_FILTER_PREPROC_HEADERS pHeaders)&lt;br /&gt;{&lt;br /&gt;      if (pUrl[0] != '/') return;&lt;br /&gt;&lt;br /&gt;      CHAR *iUrl = 0;&lt;br /&gt;      BOOL doSet = FALSE;&lt;br /&gt;&lt;br /&gt;      char *sOldUrls[] = { "/test/", "/TEST/" };&lt;br /&gt;      char *sNewUrls[] = { "/go/", "/GO/" };&lt;br /&gt;&lt;br /&gt;      for (int i=0; i&lt;2; i++)&lt;br /&gt;      {&lt;br /&gt;            if (iUrl = strstr(pUrl,sOldUrls[i]))&lt;br /&gt;            {&lt;br /&gt;                  doSet = TRUE;&lt;br /&gt;                  memcpy(iUrl,sNewUrls[i],strlen(sNewUrls[i]));&lt;br /&gt;            }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (doSet) pHeaders-&gt;SetHeader(pfc, "url", pUrl);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DWORD WINAPI HttpFilterProc(HTTP_FILTER_CONTEXT *pfc,DWORD NotificationType,VOID * pvData)&lt;br /&gt;{&lt;br /&gt;      PHTTP_FILTER_PREPROC_HEADERS pHeaders;&lt;br /&gt;      DWORD cUrlOrig = MAX_URL_LEN;&lt;br /&gt;      DWORD cUrl = cUrlOrig;&lt;br /&gt;      CHAR rgUrl[MAX_URL_LEN];&lt;br /&gt;      CHAR *pUrl;&lt;br /&gt;      BOOL result;&lt;br /&gt;&lt;br /&gt;      switch ( NotificationType )&lt;br /&gt;      {&lt;br /&gt;            case SF_NOTIFY_PREPROC_HEADERS:&lt;br /&gt;                  pHeaders = (PHTTP_FILTER_PREPROC_HEADERS) pvData;&lt;br /&gt;                  result = pHeaders-&gt;GetHeader(pfc, "url", rgUrl, &amp;cUrl);&lt;br /&gt;&lt;br /&gt;                  if (!result &amp;&amp; cUrl &gt; cUrlOrig)&lt;br /&gt;                  {&lt;br /&gt;                        pUrl = (CHAR*)LocalAlloc(0, cUrl);&lt;br /&gt;                        result = pHeaders-&gt;GetHeader(pfc, "url", pUrl, &amp;cUrl);&lt;br /&gt;                        if (!result)&lt;br /&gt;                        {&lt;br /&gt;                              LocalFree(pUrl);&lt;br /&gt;                              break;&lt;br /&gt;                        }&lt;br /&gt;                        ReMapURLs(pUrl, pfc, pHeaders);&lt;br /&gt;                        LocalFree(pUrl);&lt;br /&gt;                  }&lt;br /&gt;                  else&lt;br /&gt;                        ReMapURLs(rgUrl, pfc, pHeaders);&lt;br /&gt;                  break;&lt;br /&gt;            default:&lt;br /&gt;                  break;&lt;br /&gt;      }&lt;br /&gt;      return SF_STATUS_REQ_NEXT_NOTIFICATION;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 29 Jun 2007 08:01:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4225</guid>
      <author>mornlee (mornlee)</author>
    </item>
  </channel>
</rss>
