2010-05-02 41 views
8

Hiện nay tôi có một cái gì đó như thế này trong JSP tôiJSP 2.0 SEO liên kết thân thiện mã hóa

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

Phần quan trọng của URL của tôi là ID, tôi chỉ cần đặt tên trên nó cho mục đích SEO (giống như stackoverflow. com không).

Tôi đã tự hỏi nếu có cách nhanh chóng và sạch sẽ để mã hóa tên (thay đổi khoảng trống cho mỗi +, xóa ký tự latin, v.v.). Tôi muốn nó giống như thế này:

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

Có một chức năng như vậy ngoài kia hay tôi nên tự làm?

Trả lời

6

Không có nội dung nào giống như vậy có sẵn trong JSTL functions. Bạn sẽ cần phải tạo của riêng bạn. Tôi bằng cách này thay vì thay thế không gian bằng cách -.

Để điểm, bạn muốn thực hiện các bước sau:

  1. Chữ thường chuỗi.

    string = string.toLowerCase(); 
    
  2. Bình thường hóa tất cả các ký tự và loại bỏ tất cả diacritical marks.

    string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    
  3. Thay thế tất cả các ký tự không phải chữ và số bằng - và thu gọn khi cần.

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

Bạn có thể bọc này trong một chức năng 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}]+", "-"); 
    } 
} 

nào bạn đăng ký trong một /WEB-INF/functions.tld thích sau:

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

Mà bạn có thể sử dụng trong JSP như sau :

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

Nhân tiện, có bất kỳ tài liệu nào về việc sử dụng - thay vì + cho dấu cách không? –

+0

Không, ai đó đã làm :) Các downvote là một thời gian sau khi cập nhật của tôi. Lý do mà '-' được ưa thích là vì' + 'thực sự là ký tự" URL an toàn "cho một không gian, không dành cho mục đích SEO. Hãy xem Stackoverflow và một trang web lớn khác làm như thế nào. – BalusC

+0

+1: Bây giờ là một câu trả lời hay. Thích nó. –

2

Tìm server.urlencode, tất cả ngôn ngữ chính của máy chủ chính hiện nay đều có chúng.

+0

Điều này chỉ áp dụng [mã hóa phần trăm] (http://en.wikipedia.org/wiki/Percent-encoding). Đó không thực sự chính xác là những gì anh ta yêu cầu. Nó thực sự sẽ là một câu trả lời rất đơn giản :) Đó là bằng cách gọi là 'java.net.URLEncoder'. Không phải 'server.urlencode' hay cái gì đó C-ish như thế. – BalusC

Các vấn đề liên quan