Δημοσιεύτηκε: 23 Μάιος 2014, 21:53
@malos
Το πρόβλημα είναι ότι δεν κάνεις encode το url πριν τον χρησιμοποιήσεις.
Το url σε ένα http request δεν περιέχει κενά ή άλλους χαρακτήρες. Αυτοί μετατρέπονται πριν σταλθούν. Πχ. το "www.blabla.gr/hello world" θα αντικατασταθεί με "www.blabla.gr/hello%20world", δηλαδή ο χαρακτήρας κενό μετατρέπεται σε %20. Για να το δεις στην πράξη αντέγραψε απ' τον browser σου ένα τυχαίο url που περιέχει κενά και επικόλλησε το στο shell και θα δεις ότι δεν θα υπάρχουν κενά.
Το πρόβλημα λοιπόν στο script είναι ότι δεν φροντίζεις να κάνεις το encoding. Μία σύντομη λύση που βρήκα είναι σε perl.
Τα if, else που βάζεις επίσης μου φαίνονται περιττά οπότε ο κώδικας γίνεται:
Το πρόβλημα είναι ότι δεν κάνεις encode το url πριν τον χρησιμοποιήσεις.
Το url σε ένα http request δεν περιέχει κενά ή άλλους χαρακτήρες. Αυτοί μετατρέπονται πριν σταλθούν. Πχ. το "www.blabla.gr/hello world" θα αντικατασταθεί με "www.blabla.gr/hello%20world", δηλαδή ο χαρακτήρας κενό μετατρέπεται σε %20. Για να το δεις στην πράξη αντέγραψε απ' τον browser σου ένα τυχαίο url που περιέχει κενά και επικόλλησε το στο shell και θα δεις ότι δεν θα υπάρχουν κενά.
Το πρόβλημα λοιπόν στο script είναι ότι δεν φροντίζεις να κάνεις το encoding. Μία σύντομη λύση που βρήκα είναι σε perl.
Τα if, else που βάζεις επίσης μου φαίνονται περιττά οπότε ο κώδικας γίνεται:
- Κώδικας: Επιλογή όλων
#!/bin/bash
encoded_txt=$(echo -n "$@" | perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg');
url="https://translate.google.gr/?hl=el#en/el/$encoded_txt"
firefox "$url"
exit 0;