Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 30, 2014 19:48:05

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

убрать url encoding

сорри если путаю термины:

джанго получает через post с веб формы с textarea список имен, разделенных двойным пробелом

иногда туда встревают символы в ? урл кодировке ? ( типа dagon
 )

как сделать так чтобы при выполнении :
names_list=request.POST.split(“ ”)

в именах исчезли крякозяблы? ( типа вернулось просто

 ["dagon"], а не ["dagon
"]

и как правельно называется эта кодировка с &# ?

Отредактировано despair4 (Сен. 30, 2014 19:50:49)

Офлайн

#2 Сен. 30, 2014 19:57:06

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

убрать url encoding

names_list=request.POST.split( )
Отставить. Текстария, как и любой другой элемент формы имеет атрибут name. Этот атрибут есть и в запросе.

<textarea name="mytext" ></textarea>
names_list=request.POST["mytext"]




Офлайн

#3 Сен. 30, 2014 20:56:06

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

убрать url encoding

а ну да я похоже непонятно написал вопрос

есть функция типа:

    names_list=request.POST["names"].split("  ")
    t=[]
    for name in names_list:
        d={}
        d["name"]=name
        id1=0
        pilots_list=pilot.objects.filter(name__iexact=name)
        if len(pilots_list)==1:
            id1=pilots_list[0].id
        else:
            pilots_list=character_id.get_id_by_pilot_name(name)
            for i1 in pilots_list:
                if i1["name"].upper()== name.upper():
                    id1=int(i1["characterID"])
                    pilot(name=name,id=id1).save()
                    break
                    
        if id1:
            d["id"]=id1
            t.append(d)

мне всякие крякозяблы в посте сбивают работу character_id.get_id_by_pilot_name(name) в которую должно поступать одно чистое имя из списка имен

как эти крякозяблы называются?

и как их вырезать до или после сплита?

Офлайн

#4 Окт. 1, 2014 06:00:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

убрать url encoding

Это не краказябры, это символы tab и возврат коретки. Вам нужно придумать, как их обрабатывать.
В частности

names_list=request.POST["names"].split("  ")
а вот не рассплитится эта строка по табам, ибо таб и четыре пробела совсем не одно и то же.

Вообще, применять textarea для подобных нужд ИМХО неправильно. Сделайте набор input-ов и ничего не надо будет сплитить.



Офлайн

#5 Окт. 1, 2014 15:28:34

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

убрать url encoding

набор импутов неприемлим, игра копирует в буфер обмена имена именно в таком формате, пользователю их нада будет по быстрому отправить на мой сервак

не знаю совсем запутался в кодировках, отладочный принт выдает в иде, что пост вернул \r\n в строке, апи сервер игры, что ему отправили перевод строки в урл кодировке, подправил начало функции:

    names_list=request.POST["names"]
    names_list=re.sub(r"&#\w\w;","  ",names_list)
    names_list=names_list.rstrip()
    s=names_list.replace("\r\n","  ")
    names_list=s.split("  ")
    print "names list",names_list
    t=[]
    for name in names_list:
        if not name: continue

и вроде все заработало

Отредактировано despair4 (Окт. 1, 2014 16:45:03)

Офлайн

#6 Окт. 2, 2014 16:37:19

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

убрать url encoding

вроде разобрался откуда урл кодировка поперла, джанго оказывается возвращает textarea в простом текстовом формате, те в переменной было несколько \r\n, дальше их автоматом закодировало при отправке запроса с именем на апи сервер в урл, ответ с сервера выдал мне ошибку уже с урл кодировкой

в общем для исправления ошибки можно было не мудрить с

names_list=re.sub(r"&#\w\w;","  ",names_list)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version