2010-04-03 5 views
2

'User Name'과 같은 텍스트 문자열을 URL의 일부 (예 : 'User-Name')로 변환 할 수 있습니다. 캐릭터가 [a-zA-Z0-9]인지 확인하는 것뿐만 아니라 문자열 대체 ("-"는 "")를하는 가장 빠른 방법은 무엇입니까?텍스트 문자열을 URL 변수로 변환하는 가장 빠른 방법은 무엇입니까?

+1

왜 가장 빠른 방법이 필요합니까? URL 인코딩이 모든 애플리케이션의 병목 현상이 될 가능성은 극히 낮습니다. –

답변

3

string.translate는 이러한 종류의 문제 (문자열이 유니 코드가 아니라고 가정)에 대한 가장 빠른 해결책입니다.

def translate(x): 
    if x == ' ': return '-' 
    if 'a' <= x <= 'z': return x 
    if 'A' <= x <= 'Z': return x 
    if '0' <= x <= '9': return x 

def mk_translator(): 
    translations = ''.join(translate(chr(c)) or chr(c) for c in xrange(256)) 
    deletions = ''.join(chr(c) for c in xrange(256) if translate(chr(c)) is None) 
    return translations, deletions 

def urlize(x, translator=mk_translator()): 
    return x.translate(*translator) 

print urlize('User Name') 
+0

글자, 숫자 및 문자를 사용할 수 있으므로 내 대답이 삭제되었습니다. –

0

나는 그 목적을 위해이 기능을 사용하고 있습니다 :

import unicodedata 

def slugify(item): 
    ret = item.lower().replace(u' ', u'_') 

    return unicodedata.normalize('NFKD', ret).encode('ascii', 'ignore') 

나는 그것이하지만, 가장 빠른 방법입니다 있는지 확실하지 않습니다.

1

urllib.quote은 공백을 대시로 사용하지 않고 % 20으로 바꿉니다. 단,이 값은 문자열의 안전을 위해 제작되었습니다.

0

나는 간편성과 안전성을 위해 Ofri의 버전을 좋아하고 공백을 만들기위한 user97370 버전을 좋아합니다.

왜 둘 다 가지지 않습니까? , 즉

import string, urllib 
trans = string.maketrans(' ', '-') 
x = 'a sentence with a bunch of spaces' 
x2 = x.translate(trans) 
x3 = urllib.quote(x2) 
print x3 #--> 'a-sentence-with-a-bunch-of-spaces' 

을 하나의 방법 다음 다른 작업을 수행합니다

나는 이런 식으로 할 것. 은 URL 문자열에서 사용하는 것이 안전해야합니다. 각각에 대해 새로운 매개 변수를 만들 필요가 없습니다. 단지 x을 다시 만들 수 있습니다. x2 및 을 사용하여 명확하게 만듭니다. 공백 이외의 것들이 있다면, 번역 매트릭스에 다른 것들을 추가 할 수도 있습니다.

관련 문제