Conversion char 1 octet <> 2 octets - PHP - Programmation
Marsh Posté le 02-03-2006 à 21:29:03
tu as la fonction utf8_decode() qui fait ça.
Marsh Posté le 02-03-2006 à 21:30:08
je crois me souvenir que cette fonction merde pas mal, et que c'est le genre de trucs à faire à la main (voir les commentaires de la fonction http://www.php.net/manual/fr/funct [...] coding.php )
Marsh Posté le 02-03-2006 à 21:35:01
Citation : for ($i=0; $i<strlen($password); $i++) { |
meme comme ceci en utilisant utf8_decode(), le resultat est le meme, $res[$i*2] = 0.
@Djebel1: Merci pour le lien, je vais regarder ca de suite, même si j'ai pas trop idée de comment le faire à la main ...
Marsh Posté le 02-03-2006 à 23:01:40
Petit exemple pour etre plus precis (j'espere)
Avec le code C#, la chaine 123456 est transformée en EF4DAFDA494AD517E9823AE7D12A4C8 apres MD5.
En PHP,
md5(mb_convert_encoding($password, "UTF-8" )) ET md5(utf8_decode($password));
Renvoient tout les deux e10adc3949ba59abbe56e057f20f883e
le mb_convert_encoding n'a donc pas l'air de buguer, mais le resultat n'est toujours pas celui attendu ...
Marsh Posté le 02-03-2006 à 23:15:43
utf8_decode marchait pour moi, à condition de tester la ligne avant. Dans un script ou il me fallait absolument de l'ISO-8859-1, j'utilisais une fonction du W3C pour reconnaitre de l'UTF-8
Code :
|
et si la ligne était de l'UTF-8, alors je faisais un utf8_decode. Et pour chaque ligne il fallait revérifier si c'était de l'UTF-8, puisque bien qu'un fichier soit en UTF-8, certaines lignes ne sont pas détectées en UTF-8, et la fonction utf8_decode te sors alors de la merde
Marsh Posté le 02-03-2006 à 23:28:20
merci Djebel1 pour cette fonction que je connaissais pas
Marsh Posté le 03-03-2006 à 00:29:15
Hum oui, je comprend ce que tu dis mais ... Je crois que je me suis mal exprimé sur un point; La variable (en l'occurence $password) que je souhaite decoder est deja en UTF8, mais je dois la faire passer dans un algo de modification, qui necessite pour cela que chaque caractere soit codé sur 2 octets et non 1 ... C'est donc le probleme inverse, je dois passer ma variable $password en codage "2 octets / Caractere"
Tu vois le probleme ?
Marsh Posté le 03-03-2006 à 01:02:19
moui, enfin c'est pas un probleme d'encodage UTF-8 vers ISO-8859-1 quoi
Marsh Posté le 03-03-2006 à 07:26:39
Oui, exactement Ca l l'air tout simple a dire, mais j'arrive pas à le mettre en place ...
Marsh Posté le 03-03-2006 à 07:42:23
mais pkoi tu utilises mb_convert_encoding pour passer de l'UTF-8 vers ISO-8859-1 alors ? C'est ça que je capte pas
Marsh Posté le 03-03-2006 à 11:46:32
Citation : string mb_convert_encoding ( string str, string to_encoding) |
Citation : |
Corrigé.
En effet, autant pour moi, le FROM et le TO etaient inversés. Cela dit, md5(serialize($res)) renvoie cette fois ci 12a3b0a6e5578dd0ce9edf2ad99b8dae, qui n'est encore pas le resultat attendu ... (à savoir EF4DAFDA494AD517E9823AE7D12A4C8)
Marsh Posté le 03-03-2006 à 18:05:28
Citation : $extendedPass1 = ""; |
J'ai egalement essayé comme ca, mais toujours pas le resultat escompté .. quelqu'un aurait une idée ?
Marsh Posté le 03-03-2006 à 19:34:34
dsl, moi je connais juste un peu le passage UTF-8 vers ISO, le reste ... :x
Marsh Posté le 05-03-2006 à 16:42:09
ok, merci quand même de ton aide
Personne aurait une autre idée ?
Marsh Posté le 06-03-2006 à 15:51:33
Une idée qui vaut ce qu'elle vaut : Sans transformation du texte, est ce que t'obtiendrais pas la valeur attendus?
Marsh Posté le 02-03-2006 à 21:26:29
Bonsoir,
Voila, je suis entrain de transposer un code C# en PHP, et une petite ligne me pose probleme;
En C#, voila comment ca se passe:
On remarque le >>8 car c'est un encodage "latin1_swedish", sur 2 octets. En PHP par defaut, les chars etant traités sur 1 octets, je dois d'abord effectuer un transtypage du caractere à priori ... Je procede donc comme suit:
for ($i=0; $i<strlen($password); $i++) {
$pw[$i] = mb_convert_encoding($pw[$i], "UTF-8", "ISO-8859-1" );
$res[$i*2] = ($pw[$i] >> 8);
$res[$i*2+1] = $pw[$i];
}
Seulement voila, la presence ou non de la fonction [i]mb_convert_encoding ne change absolument rien au resultat ... ce qui fait que $res[$i*2] est toujours égal à zero ... Aurais-je raté quelque chose quelque part ?