Étape 8: URI s’échappe et comment les contourner
Si vous tentez d’exécuter le script comme c’est, vous rencontrerez plusieurs erreurs de votre système d’exploitation, et si vous regardez les chemins des fichiers que vous essayez de supprimer, vous pouvez trouver des personnages insolites, intégrées dans les voies qui sont indésirables. Il n’y a d’assez bonnes chances que ces chemins contiennent des caractères d’échappement URI.Qu’entend-on par URI s’échappe ? En HTML et XML, URI des caractères d’échappement (aka URI échappe) sont des métacaractères spéciaux utilisés pour rechercher les instances littérales de ce caractère. Par exemple, vous ne verrez jamais un espace simple dans une chaîne de caractères XML. Vous verrez, cependant, la représentation XML d’un simple espace, % 20. (Sûrement vous avez vu ces dans la barre d’URL dans votre navigateur et je me demandais ce qu’ils étaient. Eh bien, maintenant vous savez) évasion A URI se compose d’un signe % suivi d’un code de 2 chiffres hexadécimaux représentant la valeur ASCII du caractère.
À ce stade, vous pourriez écrire tout un tas de déclarations de remplacer sur le hachage emplacement pour remplacer chaque caractère de remplacement possible que vous rencontrez (c.-à-d. $loc_hash {$id} = ~ s/%20/ /; et ainsi de suite). Heureusement, cependant, Perl fournit une meilleure façon de prendre soin de ces choses.
Perl est livré avec un module appelé URI::Escape, qui a une fonction intégrée, uri_unescape, qui va faire le travail d’elliminating que échappe à l’URI pour nous. Pour utiliser le module, il suffit d’ajouter la ligne suivante en haut de votre code :
use URI::Escape;
Maintenant, après que nous assignons array $loc_hash {$id} dans la boucle du fichier XML, nous pouvons ajouter la ligne suivante par la suite :
uri_unescape($loc_hash{$id});
Ce qui précède la ligne automatiquement elliminates des caractères d’échappement URI. En prime, il se traduit par certains caractères internationaux aussi bien. J’ai exécuté le script avec quelques filepaths qu’avait japonais konji en eux et la fonction d’uri_unescape traduit les formats XML de ces personnages à leurs caractères d’origine afin de rompre le lien qui pourraient avec succès supprimez le fichier.
Avant de passer, il faut une étape supplémentaire. Pour des raisons que je ne comprends pas, iTunes encode l’esperluette (&) symbole comme & dans ses cordes. Si quelqu'un sait pourquoi il en est, s’il vous plaît laissez-moi savoir. En attendant, nous éliminer ce problème en ajoutant ce qui suit la ligne sous la ligne d’uri_unescape :
$loc_hash{$id} =~ s/&#/&/;
Maintenant le script aura filepaths clair d’étranges personnages et le dissocier fonction sera en mesure de trouver les fichiers dans leur emplacement adéquat pour les supprimer. Il va bien, si vous utilisez Mac OS x (et probablement plus d’autres OS basés sur Unix aussi bien). Lire la suite pour rendre le script compatible sur d’autres systèmes d’exploitation (à savoir, Windows).