Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

Нова тема
AJAX suggest на кирилица
Тази тема е погледната 435 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 12.06.2008 13:43
bumbar
Чирак

Мнения: (2)

Здравейте!

Имам следния проблем с AJAX:

Използвам ръководството за "PHP and AJAX Suggest" от http://www.w3schools.com/PHP/php_ajax_suggest.asp .

Примера даден там върви перфектно. Но там се използва латиница. Проблема е, че ако използвам кирилица няма никакъв резултат.

ето ги файловете:

form.html
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<
head>
<
script src="clienthint.js"></script>
</
head>

<
body>

<
form>
First Name:
<
input type="text" id="txt1"
onkeyup="showHint(this.value)">
</
form>

<
p>Suggestions: <span id="txtHint"></span></p>

</
body>
</
html>


clienthint.js (инстанция на XMLHttpRequest)
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
42
43
44
45
46
47
48
49
50
51
52
53
var xmlHttp

function showHint
(str)
{
if (str.length==0)
  {
 
document.getElementById("txtHint").innerHTML=""
 
return
 
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
  {
 
alert ("Browser does not support HTTP Request")
 
return
 
}
var url="gethint.php"
url=url+"?q="+str
url
=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 {
 
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
 
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 
{
// Firefox, Opera 8.0+, Safari
 xmlHttp
=new XMLHttpRequest();
 
}
catch (e)
 {
// Internet Explorer
 try
 
{
 
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
 
}
 
catch (e)
  {
 
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 
}
 }
return xmlHttp;
}

gethint.php
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";

//get the q parameter from URL
$q=$_GET["q"];

//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
  {
 
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
    {
   
if ($hint=="")
      {
     
$hint=$a[$i];
     
}
   
else
     
{
     
$hint=$hint." , ".$a[$i];
     
}
    }
  }
}

//Set output to "no suggestion" if no hint were found
//or to the correct values
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}

//output the response
echo $response;
?>

И във файла gethint.php ако промениме елементите на масива $a така че да съдържа думи на кирилица, скрипта не работи ...

Пробвах да променя charset=windows-1251 и пак не става: no suggest

Някой има ли идея?

Мерси.


 
---------------------------
Потребител от: 09.10.07 | Всички уроци от bumbar | Всички скриптове от bumbar
напиши eMail напиши лично съобщение виж профила на bumbar
Публикувано на: 12.06.2008 14:24
tsvetozar
Ронин

Мнения: (130)

а charset-а ти какъв е бил тогава преди да го промениш на 1251 ?


 
---------------------------
Потребител от: 16.01.05 | Всички уроци от tsvetozar | Всички скриптове от tsvetozar

http://webstrategy.awardspace.com/ - една идея за web-базирана страгегия с използването на AJAX
http://bizast.hit.bg/ - една web-базирана бизнес ориентирана системка, която все повече започва да влиза в употреба (за моя радост)
напиши eMail напиши лично съобщение виж профила на tsvetozar
Публикувано на: 12.06.2008 14:30
imagination
Ронин

Мнения: (174)

Здравей,
респонса го конвертираш с inconv() от windows-1251 на UTF-8
gethint.php
CODE
1
2
3
.....
//
output the response
echo iconv
("windows-1251", "UTF-8", $response);
Поздрави.


 
---------------------------
Потребител от: 17.02.06 | Всички уроци от imagination | Всички скриптове от imagination

http://www.absurdi.com
напиши eMail напиши лично съобщение виж профила на imagination
Публикувано на: 12.06.2008 15:22
tsvetozar
Ронин

Мнения: (130)

доколкото аз разбирам е, че входящите данни при него трябва да се конвертират, защото сравнението на стринговете след това не дава резултат. а не е проблем на изхода.


 
---------------------------
Потребител от: 16.01.05 | Всички уроци от tsvetozar | Всички скриптове от tsvetozar

http://webstrategy.awardspace.com/ - една идея за web-базирана страгегия с използването на AJAX
http://bizast.hit.bg/ - една web-базирана бизнес ориентирана системка, която все повече започва да влиза в употреба (за моя радост)
напиши eMail напиши лично съобщение виж профила на tsvetozar
Публикувано на: 12.06.2008 15:29
imagination
Ронин

Мнения: (174)

Ами тогава escape() в джаваскрипта и rawurldecode() или urldecode() в php-то.
Поздрави.


 
---------------------------
Потребител от: 17.02.06 | Всички уроци от imagination | Всички скриптове от imagination

http://www.absurdi.com
напиши eMail напиши лично съобщение виж профила на imagination
Публикувано на: 12.06.2008 15:44
tsvetozar
Ронин

Мнения: (130)

ти пробвал ли си го дали работи това, което казваш ?


 
---------------------------
Потребител от: 16.01.05 | Всички уроци от tsvetozar | Всички скриптове от tsvetozar

http://webstrategy.awardspace.com/ - една идея за web-базирана страгегия с използването на AJAX
http://bizast.hit.bg/ - една web-базирана бизнес ориентирана системка, която все повече започва да влиза в употреба (за моя радост)
напиши eMail напиши лично съобщение виж профила на tsvetozar
Публикувано на: 12.06.2008 17:42
imagination
Ронин

Мнения: (174)

Цитат от tsvetozar@12.06.2008 15:44:
ти пробвал ли си го дали работи това, което казваш ?
Какъв ти е проблема ?


 
---------------------------
Потребител от: 17.02.06 | Всички уроци от imagination | Всички скриптове от imagination

http://www.absurdi.com
напиши eMail напиши лично съобщение виж профила на imagination
Публикувано на: 12.06.2008 17:48
tsvetozar
Ронин

Мнения: (130)

Цитат от imagination@12.06.2008 17:42:
Цитат от tsvetozar@12.06.2008 15:44:
ти пробвал ли си го дали работи това, което казваш ?
Какъв ти е проблема ?

ето какъв. в HTML с javasrcipt правя това:
<script>
document.write(escape('идиот'));
</script>


резултата е: %u0438%u0434%u0438%u043E%u0442

след което този низ го пускам в PHP:
print urldecode('%u0438%u0434%u0438%u043E%u0442');
и
print rawurldecode('%u0438%u0434%u0438%u043E%u0442');

резултата е - никаква промяна. а и логично според мен не може да има промяна, защото escape() кодира стринговете по един доста специфичен начин, което е описано в документацията за функцията.


 
---------------------------
Потребител от: 16.01.05 | Всички уроци от tsvetozar | Всички скриптове от tsvetozar

http://webstrategy.awardspace.com/ - една идея за web-базирана страгегия с използването на AJAX
http://bizast.hit.bg/ - една web-базирана бизнес ориентирана системка, която все повече започва да влиза в употреба (за моя радост)
напиши eMail напиши лично съобщение виж профила на tsvetozar
Публикувано на: 12.06.2008 20:06
imagination
Ронин

Мнения: (174)

Извинявам се за недостойният тон, мога да приема, че съм сгрешил.
немога да приема обвинения без доводи.
Благодаря.


 
Това мнение е редактирано от imagination на 14.06.2008 12:08
---------------------------
Потребител от: 17.02.06 | Всички уроци от imagination | Всички скриптове от imagination

http://www.absurdi.com
напиши eMail напиши лично съобщение виж профила на imagination
Публикувано на: 12.06.2008 21:36
tsvetozar
Ронин

Мнения: (130)

браво наистина. донякъде ...

как ми беше казал пак толкова надъхано в един друг постинг - "Който иска - търси начини, който неиска си търси причини!"

начина по който си го направил е малко безсмислен. не е достатъчно само да търсиш начини, ами правилния начин.

javascript функцията е encodeURI():
<script>
document.write(encodeURI('тест'));
</script>


резултата е: %D1%82%D0%B5%D1%81%D1%82 (забележи кирилицата е escape-ната в UTF-8 автоматично).

затова след това в PHP можеш да направиш едно просто и тъпо:
print iconv('utf-8','windows-1251',urldecode('%D1%82%D0%B5%D1%81%D1%82'));

ама ако беше изчакал мъничко, човека да отовори на един въпрос поне, щеше да го накараш да мисли и да му обясниш, ако разбира вместо да му пишеш леко префърцунен код.

не е хубаво прекалено на сериозно да се вземаш. безмислено е понякога, колкото и функцията ти utf8_urldecode(). но може би целта е била да покажеш знания. браво! показа ги.

щото как беше великия цитат дето ми го изтърси ... "Който иска - търси начини, който неиска си търси причини! Айде да те видим след като толкова много знаеш какво ще измислиш :) "

ами един ден, ако си послушен, ще ти покажа как аз съм го измислил всичко да го конвертираш с един прост ХАК само с JavaScript и PHP да получава абсолютно чисти данни в charset-а на страницата и да не го е грижа от charsets, независимо windows-1251 или UTF-8. правиш веднъж и използваш хиляди пъти, без да те е грижа от charsets и т.н.

clicken sie hier то скив малко демо <-- тук няма никакъв iconv, страницата е windows-1251, PHP-то също, MySQL базата данни и тя е cp1251 и мда, PHP-то не го е грижа бъкел от UTF-8 на AJAX request-а, то просто получава всичко директно в charset-а в който е на HTML страницата указан.


ама това е само ако си послушен, щото да не се окаже, че си търся причини пак.


 
Това мнение е редактирано от tsvetozar на 12.06.2008 21:55
---------------------------
Потребител от: 16.01.05 | Всички уроци от tsvetozar | Всички скриптове от tsvetozar

http://webstrategy.awardspace.com/ - една идея за web-базирана страгегия с използването на AJAX
http://bizast.hit.bg/ - една web-базирана бизнес ориентирана системка, която все повече започва да влиза в употреба (за моя радост)
напиши eMail напиши лично съобщение виж профила на tsvetozar
Публикувано на: 13.06.2008 00:06
imagination
Ронин

Мнения: (174)

Извинявам се за недостойният тон, мога да приема, че съм сгрешил.
немога да приема обвинения без доводи.
Благодаря.


 
Това мнение е редактирано от imagination на 14.06.2008 12:09
---------------------------
Потребител от: 17.02.06 | Всички уроци от imagination | Всички скриптове от imagination

http://www.absurdi.com
напиши eMail напиши лично съобщение виж профила на imagination
Публикувано на: 13.06.2008 17:27
Miro
Ронин

Модератор

Мнения: (292)

Малко далечко отивате тука със заяждането ....

 bumbar - ползвай utf-8 и няма да имаш проблеми.


 
---------------------------
Потребител от: 22.09.06 | Всички уроци от Miro | Всички скриптове от Miro
напиши eMail напиши лично съобщение виж профила на Miro
Публикувано на: 13.06.2008 23:49
bumbar
Чирак

Мнения: (2)

Мислех въобще да не пиша повече в тоя форум ...
Много груб тон се използва тука. Ако си добър програмист - има начини да го покажеш. Без обиди и т.н.

Всъщност не е сложно. Трябва да се използва utf-8 charset.

И в кода на javascript файла се използва следното

CODE
1
2
3
4
5
6
var url="action.php"
url=url+"?q="  + encodeURIComponent(str);
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET", url,true)
xmlHttp.send(null)

CODE
1
encodeURIComponent
този метод върши работа

Мерси за коментарите и успехи!


 
---------------------------
Потребител от: 09.10.07 | Всички уроци от bumbar | Всички скриптове от bumbar
напиши eMail напиши лично съобщение виж профила на bumbar
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   





IT-PLACE.NET © 2004 - 2008