2010-05-02 22 views
8

Actualmente tengo algo como esto en mi JSPJSP 2.0 SEO enlaces amigos codificación

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

La parte importante de mi URL es el ID, acabo de poner el nombre de ella para fines de SEO (al igual que stackoverflow. com lo hace).

Me preguntaba si hay una forma rápida y limpia de codificar el nombre (cambiar espacios por +, eliminación de latin chars, etc.). Me gustaría que fuera así:

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

¿Hay alguna función como esa o debo hacer la mía?

Respuesta

6

Nada de eso está disponible en JSTL functions. Tendrás que crear el tuyo propio. Por cierto, reemplazaría espacios por -.

Hasta el punto, que desea realizar los siguientes pasos:

  1. Minúsculas la cadena.

    string = string.toLowerCase(); 
    
  2. Normalizar todos los personajes y deshacerse de todos diacritical marks.

    string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    
  3. Reemplazar todos los caracteres no alfanuméricos restantes por - y colapso cuando sea necesario.

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

Usted puede envolver esto en una función de EL:

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}]+", "-"); 
    } 
} 

¿Qué se registra en un /WEB-INF/functions.tld gusta sigue:

<?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> 

que se puede utilizar en JSP de la siguiente :

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

Por cierto, ¿hay algún documento sobre el uso - en lugar de + para los espacios? –

+0

No, alguien más lo hizo :) El downvote fue un tiempo después de mi actualización. La razón por la que se prefiere '-' es porque' '' es en realidad el carácter "URL-safe" para un espacio, no destinado a fines de SEO. Mira cómo Stackoverflow y otros sitios importantes lo hacen. – BalusC

+0

+1: Es una buena respuesta ahora. Gusta. –

2

Busque server.urlencode, todos los idiomas principales del lado del servidor los tienen actualmente.

+0

Esto solo aplica [codificación porcentual] (http://en.wikipedia.org/wiki/Percent-encoding). Eso no es exactamente lo que está pidiendo. De lo contrario, de hecho habría sido una respuesta muy simple :) Por cierto, se llama 'java.net.URLEncoder'. No 'server.urlencode' o algo parecido a C-ish. – BalusC