Paso 8: Se escapa de la URI y cómo conseguir alrededor de ellos
Si intenta ejecutar el script como es, se ejecutará en numerosos errores de su sistema operativo, y si nos fijamos en las rutas de archivo que está intentando eliminar, puede encontrar caracteres extraños encajados las vías que son indeseables. Hay una muy buena oportunidad que estas rutas de acceso contienen caracteres de escape URI.¿Qué son los URI se escapa? En HTML y XML, URI escapar caracteres (aka URI escapa) son metacaracteres especiales usados para buscar instancias literales de ese personaje. Por ejemplo, usted nunca verá un simple espacio en blanco en una cadena de caracteres XML. Sin embargo, verá la representación XML de un simple espacio en blanco, % 20. (Seguramente has visto estos en la barra de URL en tu navegador y pregunté lo que eran. Bueno, ya sabes) escape A URI consta de un signo % seguido por un código de 2 dígitos hexadecimal que representan el valor de ASCII del carácter.
En este punto, se podría escribir un montón de declaraciones de reemplazar en el hash de ubicación para reemplazar cada posible metacarácter que encuentres (es decir, $loc_hash {$id} = ~ s/%20/ /; y así sucesivamente). Afortunadamente, sin embargo, Perl proporciona una mejor manera de cuidar de estas cosas.
Perl viene con un módulo llamado URI::Escape, que tiene una función integrada, uri_unescape, que hará el trabajo de distane que del URI se escapa de nosotros. Para utilizar el módulo, simplemente agregue la línea siguiente en la parte superior de tu código:
use URI::Escape;
Ahora, después le asignamos el array $loc_hash {$id} en el loop del archivo XML, podemos añadir luego la siguiente línea:
uri_unescape($loc_hash{$id});
La anterior línea automáticamente previamente cualquier caracteres de escape URI. Como un bono adicional, se traduce así algunos caracteres internacionales. Corrí el script con unos filepaths que había konji Japon en ellos y la función de uri_unescape traducido los formatos XML de esos personajes a sus personajes originales así Desenlazar podrían con éxito borrar el archivo.
Antes de continuar, hay que tener un paso adicional. Por razones que no comprendo plenamente, iTunes codifica el ampersand (&) símbolo y en sus cadenas. Si alguien sabe por qué, por favor hágamelo saber. Mientras tanto, que eliminar este problema añadiendo la siguiente línea debajo de la línea de uri_unescape:
$loc_hash{$id} =~ s/&#/&/;
Ahora el guión tendrá filepaths de extraños personajes y el desvincular función será capaz de encontrar archivos en sus lugares adecuados para eliminarlos. Bien, lo hará si usas Mac OSX (y presumiblemente más otro SO basado en Unix). Sigue leyendo para hacer el script compatible en otros sistemas operativos (es decir, Windows).