正斜杠字符在python / html中结束变量

时间:2013-12-24 20:27:35

标签: python html raspberry-pi webiopi

我正在尝试将URL传递给python中的变量(要在Raspberry Pi上播放的视频的youtube url),但是正向斜杠字符被解释为字符串/变量的结尾。所以我没有得到“http://www.youtube.com/watch?v=5NV6Rdv1a3I”,而是获得了“http:”。

我正在使用WebIOPi服务器在html中显示包含textarea的网页。单击网页上的按钮时,将调用函数sendLink(),并将textarea中的文本作为参数传递。

index.html的内容:

    function sendLink() {
            var text = $('textarea#videolink').text();
            webiopi().callMacro("playVideo", text);
    }

    ...

    <textarea rows="1" cols="30" id="videolink">Enter YouTube link here</textarea>

函数callMacro调用一个名为playVideo的宏,用python中的另一个脚本编写:

@webiopi.macro
def playVideo(text):
    print (text)
    webiopi.debug(text)

当我在textarea中输入“a / b / c”并单击按钮时,print和webiopi.debug只显示“a”,即使显示的常规调试信息显示为“POST / macros / playVideo / a / b / c HTTP / 1.1“200,我相信这意味着变量正在传递给函数。

(发送输入文本区的文本的想法,请点击此处:http://timcorrigan.com/raspberry-pi-tracked-robot-streaming-video-and-text-to-speech/

我该如何解决这个问题?任何解决方案都很受欢

2 个答案:

答案 0 :(得分:1)

第180行here上的相关来源为do_POST

特别注意:

paths = relativePath.split("/")
if len(paths) > 2:
    value = paths[2]

最终value传递给您的宏。它表明超过第二个/的任何内容都会被丢弃。顺便说一句,看起来你可以用逗号分隔url中的参数,它们将在位置上传递。

你最好的选择可能是在发送它之前在javascript中转义字符串并在你的宏中取消它。您似乎需要转义所有网址不安全的字符/,

答案 1 :(得分:0)

我解决了这个问题。虽然kalhartt的答案并不完全适用于我的问题,但这部分让我思考:

  

你最好的选择可能是在发送它之前在javascript中转义字符串并在你的宏中取消它。看起来你需要转义所有url不安全的字符,/和。

正如我在原始问题中所写,WebIOPi称之为宏

    POST /macros/playVideo/a/b/c HTTP/1.1

其中“playVideo”是被调用的宏,这里有任何东西

    /macros/playVideo/argument/

是要传递给宏的参数。这个参数只取决于它之后的正斜杠,因为在那个斜杠之后没有更多的类别(你使用一个斜杠表示你将调用一个宏,另一个斜杠表示宏的名称,第三个斜杠到传递参数,第四个传递给什么?)。

这就是为什么在正斜线被切断之后的任何事情。我通过用

替换javascript中的所有正斜杠来解决这个问题
     text = text.replace(/\//g,"fslash");

然后在应该接收参数的python脚本中用“/”替换“fslash”。我也替换了问号,因为那些也引起了问题。