Tengo una url (por ejemplo,http://www.youtube.com/watch?v=og9B3BEnBHo) y me gustaría añadir un parámetro a (wmode=opaco) de modo que su:

http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaco

¿Alguien puede decirme que la función a utilizar para hacer este trabajo?

  • Nos haría falta un poco más de información para ser capaz de ayudar. código de ie. Con el actual yo diría que hacer «uri + ‘wmode=opaca’ y que le daría la cadena correcta. Está usted usando net/http o en otra biblioteca?
  • Me gustaría asegurarse de que se unan correctamente (es la entrada del usuario). nota: ‘youtube.com/watch‘ + ‘wmode=opaca’ debería ser ‘youtube.com/watch?wmode=opaque
  • Si usted tiene los parámetros como un Hash, intente to_query. Es parte de ActiveSupport así que usted también podría tener que exigir que. Pero funciona muy bien para nosotros.
InformationsquelleAutor manuels | 2011-10-16

4 Comentarios

  1. 61
    require 'uri'
    
    uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
    uri.query = [uri.query, "wmode=opaque"].compact.join('&') 
    puts uri.to_s
    
    #edit Since 1.9.2 there are methods added to the URI module
    
    uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
    new_query_ar = URI.decode_www_form(String(uri.query)) << ["wmode", "opaque"]
    uri.query = URI.encode_www_form(new_query_ar)
    puts uri.to_s

    (La llamada a la String asegura que esto también funciona en el caso de que el original de la URI no tiene una cadena de consulta)

    • uri.query devuelve nil si la URL no tiene ningún param y el URI.decode_www_form(nil) se rompe.
    • new_query_ar = URI.decode_www_form(uri.query || []) << ["wmode", "opaque"] si te encuentras con el problema nil
    • Nota; decodificar requiere de una cadena en lugar de una matriz, por lo que new_query_ar = URI.decode_www_form(uri.query || '') << ["wmode", "opaque"]
    • Esta respuesta es obsoleta. Uso URI.encode_www_form({wmode: "opaque"}) lugar.
  2. 17

    Como el Rubí ha evolucionado a lo largo de los años, la respuesta varía entre versiones.

    Después de 1.9.2

    Ruby 1.9.2 vio decode_www_form y encode_www_form añadido a la URI módulo, haciendo que los parámetros de codificación más fácil.

    require 'uri'
    
    uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
    new_query_ar = URI.decode_www_form(uri.query || '') << ["wmode", "opaque"]
    uri.query = URI.encode_www_form(new_query_ar)
    puts uri.to_s

    Explicación

    URI.decode_www_form rompe una cadena de parámetros de consulta (uri.query) en una matriz anidada de parámetros ([["v", "og9B3BEnBHo"]])

    uri.query || '' suministros de la cadena de consulta de la uri, o si no existe, una cadena vacía. Esto evita que decode_www_form de ejecución en un error si uri.query es nil.

    << ["wmode", "opaque"] añade otro elemento a la matriz de parámetros de consulta. Usted puede agregar más, ampliando new_query_ar: new_query_ar << ["fullscreen", "1"]

    URI.encode_www_form codifica la matriz anidada de los nuevos parámetros de la consulta en una cadena.

    Antes de 1.9.2

    require 'uri'
    
    uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
    uri.query = [uri.query, "wmode=opaque"].compact.join('&') 
    puts uri.to_s

    Explicación

    [uri.query, "wmode=opaque"] es una matriz con todos los eventuales de los parámetros de la consulta. Usted puede agregar más por la ampliación de la matriz: [uri.query, "wmode=opaque", "fullscreen=1"] o mediante la adición al elemento final: "wmode=opaque&fullscreen=1"

    compacto quita nil elementos de una matriz, por lo tanto se elimina uri.query si no hay una consulta existente parámetro.

    join, finalmente, se une a ellos en una cadena de consulta.

  3. 5

    Ya que se puede tener varios parámetros de consulta que desea agregar y no sólo uno, he aquí una versión que permite añadir tantos parámetros como usted desee, simplemente pasando un hash … Además de un Hash parece una forma más natural para pasar en params de todos modos, incluso si sólo estás añadiendo una param.

      require 'uri'
      def add_params(url, params = {})
        uri = URI(url)
        params    = Hash[URI.decode_www_form(uri.query || '')].merge(params)
        uri.query =      URI.encode_www_form(params)
        uri.to_s
      end

    Ejemplos:

    pry(main)> helper.add_params("http://example.com", b: 2)
    => "http://example.com?b=2"
    
    pry(main)> helper.add_params("http://example.com?a=1", b: 2, c: 3)
    => "http://example.com?a=1&b=2&c=3"
    
    pry(main)> helper.add_params("http://www.youtube.com/watch?v=og9B3BEnBHo", wmode: 'opaque')
    => "http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque"

Dejar respuesta

Please enter your comment!
Please enter your name here