Javascript encoding question

Giorgos Keramidas keramida at ceid.upatras.gr
Sat Jul 14 02:17:48 EEST 2007


On 2007-07-14 00:13, Θοδωρής Λύτρας <thlytras at gmail.com> wrote:
> Προσπαθώ να φτιάξω μια εφαρμογούλα με χρήση PHP και Javascript. Σε κάποιο
> σημείο της κάνω χρήση της συνάρτησης sha1 της PHP (mcrypt module), καθώς και
> ενός αντίστοιχου έτοιμου javascript που υπολογίζει το sha1 hash.
>
> Αν τροφοδοτήσω τις δύο συναρτήσεις με κάποια αγγλική λέξη, δίνουν το ίδιο
> hash. Αν όμως τους δώσω μια ελληνική λέξη, δεν δίνουν το ίδιο hash.
> Υποπτεύομαι οτι κάτι παίζει με τα encodings, αλλά δεν βρίσκω την άκρη. Στο
> head section της σελίδας μου έχω δώσει <meta http-equiv="content-type"
> content="text/html; charset=utf-8"> .
>
> Για να μιλώ και με δεδομένα: η λέξη "test" μου δίνει sha1 hash
> a94a8fe5ccb19ba61c4c0873d391e987982fbbd3, τόσο σε php όσο και σε javascript,
> ότι encoding κι αν έχω στη σελίδα.
>
> Η ελληνική λέξη "τέστ" μου δίνει στην javascript πάντοτε
> 4f51cf01416c17e386053b126ad00c6e6a972771 ενώ σε php μου δίνει
> 266df4adbcf42415e10072d25098da6935121d56 για utf8,
> a6fa1038b66f3ae92096411a96e59ae9b85d7034 για iso8859-7 και
> 6bd1110d1f9bb0ec8701f32a61cb7de7bf7cba00 για iso8859-1.
>
> Χρησιμοποιεί κάποιο διαφορετικό encoding η javascript???
> Και αν ναι, μήπως τίθεται θέμα για το αν η συνάρτηση στην javascript θα μου
> δίνει διαφορετικό αποτέλεσμα από browser σε browser???

Δοκίμασε να μετατρέψεις το string σε byte-array και τύπωσε τα bytes που
έχει κάθε φορά.  Αν είναι διαφορετικά (που θά 'πρεπε να είναι), τότε
είναι λογικό το sha1 hash να είναι διαφορετικό:

=====

$ echo τεστ | iconv -t utf-8 | hd
00000000  cf 84 ce b5 cf 83 cf 84  0a                       |Ο.Ξ΅Ο.Ο..|
00000009
$ echo τεστ | hd
00000000  f4 e5 f3 f4 0a                                    |τεστ.|
00000005
$

=====

$ echo τεστ | iconv -t utf-8 | sha1
2dc49218330f983c454d75492b98d3abdade2759
$ echo τεστ | sha1
e697010e9e6f771b59f1bcebb43186454ca829e7
$

=====




More information about the Linux-greek-users mailing list