2010-05-02 12 views
8

वर्तमान में मैं कुछ इस तरह मेरी JSPJSP 2.0 एसईओ अनुकूल लिंक एन्कोडिंग

<c:url value="/teams/${contact.id}/${contact.name}" /> 

में मेरी यूआरएल की महत्वपूर्ण हिस्सा आईडी है मैं सिर्फ एसईओ प्रयोजनों (बस stackoverflow की तरह के लिए उस पर नाम रखा है,। कॉम करता है)।

मैं सोच रहा था कि एन्कोड नाम (प्रति स्थान रिक्त स्थान बदलें, लैटिन वर्ण हटाने आदि) का त्वरित और साफ तरीका है या नहीं। मुझे यह पसंद है:

<c:url value="/teams/${contact.id}/${supercool(contact.name)}" /> 

क्या वहां कोई ऐसा कार्य है या क्या मुझे अपना खुद का बनाना चाहिए?

उत्तर

6

ऐसा कुछ भी नहीं है JSTL functions में उपलब्ध है। आपको अपना खुद का बनाना होगा। मैं - द्वारा जगहों को जगह के बजाय बदलता हूं।

बिंदु के लिए, आप निम्न चरणों का पालन करना चाहते हैं:

  1. छोटे स्ट्रिंग।

    string = string.toLowerCase(); 
    
  2. मानक के अनुसार सभी पात्रों और सभी diacritical marks से छुटकारा पाने के।

    string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    
  3. - द्वारा सभी शेष गैर अक्षरांकीय अक्षर बदलें और पतन जब आवश्यक।

    string = string.replaceAll("[^\\p{Alnum}]+", "-"); 
    

आप एक ईएल समारोह में इस लपेट कर सकते हैं:

package com.example; 

import java.text.Normalizer; 
import java.text.Normalizer.Form; 

public final class Functions { 
    private Functions() {} 

    public static String prettyURL(String string) { 
     return Normalizer.normalize(string.toLowerCase(), Form.NFD) 
      .replaceAll("\\p{InCombiningDiacriticalMarks}+", "") 
      .replaceAll("[^\\p{Alnum}]+", "-"); 
    } 
} 

जो तुम एक /WEB-INF/functions.tld चाहते में रजिस्टर इस प्रकार है:

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 

    <display-name>Custom Functions</display-name>  
    <tlib-version>1.0</tlib-version> 
    <uri>http://example.com/functions</uri> 

    <function> 
     <name>prettyURL</name> 
     <function-class>com.example.Functions</function-class> 
     <function-signature>java.lang.String prettyURL(java.lang.String)</function-signature> 
    </function> 
</taglib> 

इस प्रकार है जो तुम JSP में उपयोग कर सकते हैं :

<%@taglib uri="http://example.com/functions" prefix="f" %> 
... 
<a href="teams/${contact.id}/${f:prettyURL(contact.name)}">Permalink</a> 
+0

वैसे, क्या स्पेस के लिए + के बजाय उपयोग करने के बारे में कोई दस्तावेज़ है? –

+0

नहीं, किसी और ने किया :) डाउनवोट मेरे अपडेट के कुछ समय बाद था। कारण ''' को प्राथमिकता दी गई है क्योंकि '+' वास्तव में एक स्थान के लिए "यूआरएल-सुरक्षित" चरित्र है, जिसका उद्देश्य एसईओ उद्देश्यों के लिए नहीं है। देखो कैसे Stackoverflow और एक और प्रमुख साइटें यह करते हैं। – BalusC

+0

+1: अब यह एक अच्छा जवाब है। पसंद है। –

2

server.urlencode की तलाश करें, आज सभी प्रमुख सर्वर साइड भाषाएं हैं।

+0

यह केवल [प्रतिशत एन्कोडिंग] लागू होता है (http://en.wikipedia.org/wiki/Percent-encoding)। वह वास्तव में बिल्कुल नहीं है कि वह क्या पूछ रहा है। यह वास्तव में एक बहुत ही सरल जवाब रहा होगा :) यह 'java.net.URLEncoder' नामक तरीके से है। 'Server.urlencode' या कुछ ऐसा नहीं है। – BalusC

संबंधित मुद्दे