Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [js] podmiana znaków
dyktek
post 25.05.2006, 11:12:07
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

Ostrzeżenie: (0%)
-----


Witam, napisałem sobie kodzik, który podmienia mi litery PL na określony kod, skrypt wygląda tak

  1. function pl2Uni(string, driv){
  2.  
  3. var uni = new Array();
  4.  
  5. uni[0] = 'UNI261';
  6. uni[1] = 'UNI260';
  7. uni[2] = 'UNI281';
  8. uni[3] = 'UNI280';
  9. uni[4] = 'UNI322';
  10. uni[5] = 'UNI321';
  11. uni[6] = 'UNI324';
  12. uni[7] = 'UNI323';
  13. uni[8] = 'UNI211';
  14. uni[9] = 'UNI210';
  15. uni[10] = 'UNI347';
  16. uni[11] = 'UNI346';
  17. uni[12] = 'UNI377';
  18. uni[13] = 'UNI378';
  19. uni[14] = 'UNI379';
  20. uni[15] = 'UNI380';
  21. uni[16] = 'UNI262';
  22. uni[17] = 'UNI263';
  23.  
  24.  
  25. var pl = new Array();
  26.  
  27. pl[0] = /(ą|ą|š)/;
  28. pl[1] = /(Ą|ˇ)/;
  29. pl[2] = /(ę)/;
  30. pl[3] = /(Ę)/;
  31. pl[4] = /(ł)/;
  32. pl[5] = /(Ł)/;
  33. pl[6] = /(ń)/;
  34. pl[7] = /(Ń)/;
  35. pl[8] = /(ó)/;
  36. pl[9] = /(Ó)/;
  37. pl[10] = /(ś|ś)/;
  38. pl[11] = /(Ś|Ś)/;
  39. pl[12] = /(Ź|Ź)/;
  40. pl[13] = /(ź|Ľ)/;
  41. pl[14] = /(Ż)/;
  42. pl[15] = /(ż)/;
  43. pl[16] = /(ć)/;
  44. pl[17] = /(Ć)/;
  45.  
  46. var plWin = new Array();
  47.  
  48. plWin[0] = 'ą';
  49. plWin[1] = 'ˇ';
  50. plWin[2] = 'ę';
  51. plWin[3] = 'Ę';
  52. plWin[4] = 'ł';
  53. plWin[5] = 'Ł';
  54. plWin[6] = 'ń';
  55. plWin[7] = 'Ń';
  56. plWin[8] = 'ó';
  57. plWin[9] = 'Ó';
  58. plWin[10] = 'ś';
  59. plWin[11] = 'Ś';
  60. plWin[12] = 'Ź';
  61. plWin[13] = 'Ľ';
  62. plWin[14] = 'Ż';
  63. plWin[15] = 'ż';
  64. plWin[16] = 'ć';
  65. plWin[17] = 'Ć';
  66.  
  67. var result = new Array();
  68.  
  69. result[0] = string;
  70.  
  71. for(i=0; i < pl.length; i++){
  72. if(driv == 1)
  73. result[i+1] = result[i].replace(pl[i], uni[i]);
  74. else if(driv == 0)
  75. result[i+1] = result[i].replace(uni[i], plWin[i]);
  76. }
  77. return result[i];
  78. }


wywołać go można tak
  1. pl2Uni('jakiś tam tekst', 1) // zakoduje stringa wstawia za znaki PL odpowiedni kod z tablicy UNI
  2. pl2Uni('jakiUNI347 tam tekst', 0) // rozkoduje stringa zamieni kod UNI na znak PL


jak pisałem kod działa ale gdy wywołam go tak że ten sam polski znak wystepuje 2-razy w stringu np
  1. pl2Uni('ąą śś', 1)
to zamieni mi tylko pierwszy znak 'ą' i pierwszy znak 'ś'. Problem leży tutaj że metoda replace() zamienia tylko pierwszy znak ą w stringu i piersze ś.

I moje pytanie czy jest jakaś metoda która zadziała jak replace ale zamieni mi od razu wszystkie znaki w stringu nie tylko pierwszy napotkany, czy będe musiał rozbijać stringa na pojedyńcze znaki i sprawdzać każdy znak osobno, co nie byłoby zbyt szczęśliwym rozwiązaniem gdyż przeszukiwane stringi są bardzo długie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
dyktek
post 26.05.2006, 10:41:01
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

Ostrzeżenie: (0%)
-----


poszperałem troche i przerobiłem nieco tą pętle teraz wygląda to tak
  1. for(i=0; i < pl.length; i++){
  2. if(driv == 1)
  3. result[i+1] = result[i].replace(RegExp(pl[i], 'g'), uni[i]);
  4. else if(driv == 0)
  5. result[i+1] = result[i].replace(RegExp(uni[i], 'g'), plWin[i]);
  6. }
  7. return result[i];


ale pomimo w tej chwili funkcja działa tak jakby w jedną stronę, może mi ktoś podpowiedzieć czy dobrze kombinuje
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:55