2010-12-14 11 views
5

Por lo general, si incluyo, en el archivo foo.m, un comentario de la forma:¿Cómo hago que Matlab ayude a mostrar correctamente los enlaces web para URLs extrañas?

% See also: <a href="http://en.wikipedia.org/etc">link name</a> 

el enlace aparece en la browswer ayuda, es decir en Matlab, expido

>> help foo 

y yo obtener algo así como

Ver también: link name

hasta ahora todo bien. Sin embargo, hay algunas direcciones web que tienen caracteres extraños, por ejemplo:

% See also: <a href="http://en.wikipedia.org/wiki/Kernel_(statistics)">http://en.wikipedia.org/wiki/Kernel_(statistics)</a> 

Matlab no hace esto correctamente en el navegador de ayuda. Cuando veo la ayuda, que se ve así:

Ver también: statistics) "> http://en.wikipedia.org/wiki/Kernel_ (statistics)

donde el enlace consiste en el directorio local llamado 'estadística'. he intentado todo tipo de escapes de cotización y las barras invertidas, pero no puedo conseguir el navegador de ayuda para que funcione correctamente.

Respuesta

4

Url-escapar de los divertidos personajes con los códigos de caracteres.

function foo 
%FOO Function with funny help links 
% 
% Link to <a href="http://en.wikipedia.org/wiki/Kernel_%28statistics%29">some page</a>. 

La función urlencode() de Matlab le mostrará qué códigos usar. Pero mantén el colon y las barras como están.

>> disp(urlencode('Kernel_(statistics)')) 
Kernel_%28statistics%29 

Aquí hay una función que citará los elementos de ruta de URL, conservando intactas las partes que necesita dejar.

function escapedUrl = escape_url_for_helptext(url) 

ixColon = find(url == ':', 1); 
if isempty(ixColon) 
    [proto,rest] = deal('', url); 
else 
    [proto,rest] = deal(url(1:ixColon), url(ixColon+1:end)); 
end 

parts = regexp(rest, '/', 'split'); 
encodedParts = cellfun(@urlencode, parts, 'UniformOutput', false); 
escapedUrl = [proto join(encodedParts, '/')]; 

function out = join(strs, glue) 

strs(1:end-1) = strcat(strs(1:end-1), {glue}); 
out = cat(2, strs{:}); 

Para utilizarlo, simplemente pase la URL completa.

>> escape_url_for_helptext('http://en.wikipedia.org/wiki/Kernel_(statistics)') 
ans = 
http://en.wikipedia.org/wiki/Kernel_%28statistics%29 
+0

Para completar, también tengo que escapar en el texto del enlace: '% Vea también: http://en.wikipedia.org/wiki/Kernel_%28statistics%29'. Si tengo Kernel_ (estadísticas) dentro del par '', Matlab no lo representa correctamente. Gracias por la captura, estoy abofeteando mi cabeza por no verlo. – shabbychef

Cuestiones relacionadas