parserALT
Страницы форума: ← Назад | 1 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 600 | Дальше →

html-encoded или как обратно преобразовать?

#1developer
01.06.10 20:30
www.parser.ru → | ответить → | в избранное →

html-encoded или как обратно преобразовать?

Я передаю через POST русский (да вообще любой) текст (у меня форма и используется AJAX). Текст передаётся в виде %3Cp%3E%0A%09%D0%A2%D0%B5%D0%BA%D1%81%D1%82%2C+%D0%B2%D1%8B%D0

как его преобразовать обратно?
#2Janek
→ developer [#1] | 01.06.10 21:32 / 21:32
www.parser.ru → | ответить → | в избранное →

^JSHttpRequest.decodeText[%3Cp%3E%0A%09]

http://www.parser.ru/off-line/examples/js_http_request/JSHttpRequest.zip

JSHttpRequest.p
#3developer
→ Janek [#2] | 02.06.10 10:44
www.parser.ru → | ответить → | в избранное →
спасибо, только как вызывать этот метод? если ^JSHttpRequest.decodeText[%3Cp%3E%0A%09] - то это выдает ошибку, если ^JSHttpRequest:decodeText[%3Cp%3E%0A%09] то требует чтобы результат в хеш передавался, а он в итоге оказывается пустой.
#4developer
→ developer [#3] | 02.06.10 10:48
www.parser.ru → | ответить → | в избранное →

пардон

разобрался.
в общем для тех кто тоже столкнется.

$aaa[^hash::create[^JSHttpRequest:decodeRequest[]]] - заберём тело пост запроса

а потом выведем содержимое

^aaa.foreach[key;value]{
$key=$value
}[<br />]
^aaa._count[]

Janek - спасибо за помощь!!!!!
#5developer
→ developer [#4] | 02.06.10 11:01
www.parser.ru → | ответить → | в избранное →
и всё же не работает c русским тестом.(
#6Vint
→ developer [#5] | 02.06.10 11:09
www.parser.ru → | ответить → | в избранное →

Лучше поставить парсер 3.4.0 и не мучиться с этим классом

#7developer
→ Vint [#6] | 02.06.10 11:12
www.parser.ru → | ответить → | в избранное →
так стоит последняя версия. а всёравно косяки с русским тестом? или тут естьк акой-то специальный оператор?
#8Vint
→ developer [#7] | 02.06.10 11:13
www.parser.ru → | ответить → | в избранное →

Хорошо

Тогда как происходит работа с аяксом на стороне клиента и сервера?
Покажите код.
#9developer
→ Vint [#8] | 02.06.10 11:27
www.parser.ru → | ответить → | в избранное →
Запрос выглядит так:
$.post('/admin/funcs/', { 'update_minipageblock' : '1','id':$("#minipage_id").val(),'name':$('#minipage_name').val(), ....


ну соответственно у же на стороне сервера:
$bodyh[^hash::create[^JSHttpRequest:decodeRequest[]]]
$body[]
^bodyh.foreach[key;value]{
^if($key eq update_minipageblock){
$bbb[^hash::create[^JSHttpRequest:decodeRequest[]]]
$body[]
^bbb.foreach[key;value]{
$body[$key=$value&$body]
}
^void:sql{update pages_ru set name='^get_parametr[$body;name]', text='^get_parametr[$body;text]', active='^get_parametr[$body;isactive]',text2='^get_parametr[$body;text2]', text3='^get_parametr[$body;text3]' where id=^get_parametr[$body;id]}
}
}
#10Vint
→ developer [#9] | 02.06.10 11:30
www.parser.ru → | ответить → | в избранное →
А теперь попробуйте вместо всей этой лабуды честно работать с полями формы:
$form:update_minipageblock
$form:id
и т.д.
#11developer
→ Vint [#10] | 02.06.10 11:34
www.parser.ru → | ответить → | в избранное →
да, попробовал, только от этого разница не большая - русский текст всё равно выводится в виде html-encoded
#12developer
→ developer [#11] | 02.06.10 11:36
www.parser.ru → | ответить → | в избранное →

т.е.

на сайте в тектсовой форме <p> а</p> а уже парсер выводит <p> Р°</p>
#13Vint
→ developer [#12] | 02.06.10 11:38
www.parser.ru → | ответить → | в избранное →

Тогда дело в кодировке.

Какие response и request charset указаны?
В какой кодировке браузер показывает сайт?
#14developer
→ Vint [#13] | 02.06.10 11:39
www.parser.ru → | ответить → | в избранное →
да, кодировка помогла. поставил utf8 спасибо!!!!
#15developer
→ developer [#14] | 02.06.10 11:56
www.parser.ru → | ответить → | в избранное →
и маленькая проблемка) - как заставить JQUERY передавать параметры?
т.е. если вот так передовать $.post('/admin/funcs/', { 'update_minipageblock' : '1','id':$("#minipage_id").val(),'name':$('#minipage_name').val(), ....

то ничего не передаётся(смотрю в FireBug), однако если в консоли открыть запрос в новой вкладке то все параметры передаются.
#16developer
→ developer [#15] | 02.06.10 12:01
www.parser.ru → | ответить → | в избранное →
в общем всё же не передаются постом значения $form:....

можно их получить только через $request:body

а потом с помощью класса этого переконвертировать, но в итоге всёравно русский текст остаётся каким был - т.е. html-encoded
#17Vint
→ developer [#15] | 02.06.10 12:10
www.parser.ru → | ответить → | в избранное →
Почитайте про формат json, как он формируется.
Важно понимать какие значения надо квотить, а какие нет.
В качестве теста желательно квотить всё.
#18developer
→ Vint [#17] | 02.06.10 12:25
www.parser.ru → | ответить → | в избранное →
пробовал заквотить всё - тот же результат. всё нормально, кроме русского текста
#19Vint
→ developer [#18] | 02.06.10 12:32
www.parser.ru → | ответить → | в избранное →
А как показывает firebug отправляемые данные, там нормально выглядит русский текст?
#20developer
→ Vint [#19] | 02.06.10 12:53
www.parser.ru → | ответить → | в избранное →
1)если смотреть на пост запрос в консоли firebug то $form не работют,т .е. только если $response.body и т.д.
в таком варианте надо использовать ^JSHttpRequest:decodeRequest[] и тогда отображается всё номально кроме русского текста

2) если же в консоли firebug правой кнопкой на запросе-> показать в новом окне. то в этом случае уже $form:... работают и!!! русский текст показывается нормально без ^JSHttpRequest:.
#21Vint
→ developer [#20] | 02.06.10 12:58
www.parser.ru → | ответить → | в избранное →

Значит всё работает

Только надо смотреть не в новом окне, а просто разворачивать запрос (кликать на него один раз).
Там должны быть соотв. табы со всей информацией:
Headers Post Response JSON
#22developer
→ Vint [#21] | 02.06.10 13:03
www.parser.ru → | ответить → | в избранное →
1) смотрю вкладки запроса:
в Post всё отображается как надо
в HTML русский текст в html-encoded
в ОТВЕТ - пусто!!! а должно отображаться $form:text (text - это параметр который я в пост-запросе передаю). А вот если открыть запрос в новом окне то я увижу содержимое $form:text
#23Vint
→ developer [#22] | 02.06.10 13:10
www.parser.ru → | ответить → | в избранное →
Вам надо проверить, чтобы на сервер нормально приходил русский текст. Для отладки сохраняйте в файл поля формы.

С ответом разберётесь потом отдельно.
#24developer
→ Vint [#23] | 02.06.10 13:32 / 13:41
www.parser.ru → | ответить → | в избранное →
а как это сделать? на сервер руский текст приходит криво - где икать проблему? фаербаг показывает что в пост запросе текст русский отображдается нормально.
#25Vint
→ developer [#24] | 02.06.10 13:57
www.parser.ru → | ответить → | в избранное →
Проверить ещё раз везде кодировки (в том числе и в закладке Headers).
Уверены, что текст приходит криво? $response:body в файл сохраняли?
Парсер точно последний?
#26Maxx
→ developer [#24] | 02.06.10 13:58
www.parser.ru → | ответить → | в избранное →
^form:text.save[/text-debug.txt]


и посмотреть что будет в файле
#27developer
→ Vint [#25] | 02.06.10 15:17
www.parser.ru → | ответить → | в избранное →
парсер вроде последний (так говорит админ) - а как можно проверить?

из информации из firebug

Content-type у ответа: Content-Type text/html; charset=WINDOWS-1251

Content-type у запроса: Content-Type application/x-www-form-urlencoded; charset=UTF-8

вижу что они разные хотя в @auto[] указано так:
$request:charset[windows-1251]
$response:charset[windows-1251]
$response:content-type[
$.value[text/html]
$.charset[$response:charset]
]
#28Misha v.3
→ developer [#27] | 02.06.10 15:33
www.parser.ru → | ответить → | в избранное →

вы-же написали, что указали UTF-8?

«html-encoded или как обратно преобразовать?»

т.к. данные от скрипта вы получаете в utf-8, то в $response:charset (и $response:content-type.charset) должно быть utf-8

если другие ваши страницы отдаются в 1251, вы можете только для этой страницы указать utf-8.
#29developer
→ Misha v.3 [#28] | 02.06.10 15:56
www.parser.ru → | ответить → | в избранное →
да писал. но потом ещё писал)

я сам не понимаю почему так: если я смотрю прям в консоли firebug'a то там русский текст на закладке ответ может выдаваться только если в парсерном файле выводить его через request.body и выводиться он в хтм-энкодед. если же открыть данный пост запрос в новой вкладке то тогда выводится текст нормально и причём его можно вывести через $form...вот. поэтому когда я писал про то что всё заработало - это заработало для отображения запроса в новой вкладке. а так на самом деле всё по старому
#30Misha v.3
→ developer [#29] | 02.06.10 16:01 / 16:05
www.parser.ru → | ответить → | в избранное →

бррр. 1251 в $response:charset -- неправильно.

сделайте правильно, потом продолжайте разбираться и проверять записью значения form с русскими буквами в файл (а про ручное декодирование упомянутым классом забудьте)

и сначала разберитесь со входящими данными, и только потом будете разбираться с исходящими ($response:charset влияет и на входящие данные)

P.S. приводите код, т.к. угадать что именно вы сделали -- не получается.

P.P.S. прочитайте FAQ по использованию форума и используйте [code/]
#31developer
→ Misha v.3 [#30] | 02.06.10 17:53 / 17:58
www.parser.ru → | ответить → | в избранное →
1)ещё раз запрос:
$.post('/admin/funcs/', { 'add_newminipageblock' : '1','name':$('#minipage_name').val(),......

2)есть файл auto.p по адресу /admin/funcs/
его код:
@auto[]
	$request:charset[UTF-8]
	$response:charset[UTF-8]
	$response:content-type[
		$.value[text/html] 
		$.charset[$response:charset]
	]
@main[]
^connect[$SQL.connect-string]{

		^get_data[]
	

}
@get_data[]
$aaa[^hash::create[^JSHttpRequest:decodeRequest[]]] 
^aaa.foreach[key;value]{ 
$key=$value 
}[<br />] 


русский текст выводится в html-encoded, английский текст выводится нормально. парсер обновил до самой последней версии

т.е. если смотреть в firebag во вкладке ответ:
parentid=2 <br /> name=%D0%9D%D0&#65533;%D0%B7%D0%B2%D0&#65533;%D0%BD%D0%B8%D0%B5+CAPTION <br /> update_minipageblock=1 <br /> category=countries <br /> isactive=0 <br /> subcategory=infopage <br /> text='&lt;p&gt;
%D0%A2%D0%95%D0%9A%D0%A1%D0%A2!&lt;%2Fp&gt;' <br /> id=1 
#32Vint
→ developer [#31] | 02.06.10 18:13
www.parser.ru → | ответить → | в избранное →
Вам уже несколько раз написали, что надо забыть про ответ с сервера. Он тут пока не важен.
И вместо JSHttpRequest надо взять данные из формы и положить их в файл:
^form:name.save[/name.txt]
Страницы форума: ← Назад | 1 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 600 | Дальше →