在URL中使用另一个url作为参数时会被`&`截断的问题

在URL中使用另一个url作为参数时会被&截断的问题

下午帮同事写一个url转二维码的小工具时,发生标题中描述的问题。比如:输入的url是http://www.example.dev/name=user&code=2000,转换为二维码后,扫描得到的url却是http://www.example.dev/name=user,&后的部分没有正确转换。问题很明显,作为参数的url中的&后的被解析为其他参数了。

前台请求的完整url是"http://{domain}/tools/getQrCode.php?url=http://www.example.dev/name=user&code=2000,后台从$_GET[‘url‘]中取得却是http://www.example.dev/name=user,另一部分成了$_GET[‘code‘]了。

解决方法其实很简单,给作为参数的url做一下urlencode就好了。js中可以直接使用encodeURIComponent函数为url编码。

代码示例如下:

  • 后台php
<?php

$url = isset($_GET['url']) ? $_GET['url'] : '';
if (empty($url)) {
    echo '<div class="alert alert-danger" role="alert">请输入url!</div>';
    exit(1);
}
echo genQrCode($url);
exit(0);

function genQrCode($url=''){
    require_once 'libs/phpqrcode.php';
    $value = $url;                  //二维码内容

    $errorCorrectionLevel = 'L';    //容错级别
    $matrixPointSize = 5;           //生成图片大小

    //生成二维码图片
    $filename =  '/../tmp/'.microtime().'.png';
    QRcode::png($value, dirname( __FILE__ ) . $filename, $errorCorrectionLevel, $matrixPointSize, 2);

    return '<img src="tmp'. $filename . '"><br><p>' . $url . '</p>';
}
  • 前台html和js
之前的部分略
        <div class="col-md-6 col-lg-6">
            <div class="panel panel-warning">
                <div class="panel-heading">二维码转换</div>
                <div class="panel-body">
                    <form>
                        <div class="form-group">
                            <label for="url">url</label>
                            <input type="text" class="form-control" id="url" placeholder="url">
                        </div>
                        <button type="button" id="getQr" class="btn btn-primary">生成二维码</button>
                        <button type="reset" class="btn btn-success">清除url</button>
                    </form>
                </div>

                <div id="qrdiv" class="panel-body" style="word-break: break-all;">

                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    $(
        $("#getQr").click(function () {
            $qrstr=$("#url").val();
            $url = "tools/getQrCode.php?url=" + encodeURIComponent($qrstr);
            $.get($url, function (result) {
                $("#qrdiv").html(result);
            });
        })
    );
</script>
</body>
</html>

PS:样式部分使用的bootstrap3
以上

原文地址:https://www.cnblogs.com/colbertwong/p/8626394.html

时间: 2024-10-10 09:40:01

在URL中使用另一个url作为参数时会被`&`截断的问题的相关文章

linux中内核的一个不错的参数somaxconn

导读:在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了. 每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度,与如下两方面有关: - somaxconn参数. - 使用该端口的

布隆过滤器 - 如何在100个亿URL中快速判断某URL是否存在?

题目描述 一个网站有 100 亿 url 存在一个黑名单中,每条 url 平均 64 字节.这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中? 题目解析 这是一道经常在面试中出现的算法题.凭借着题目极其容易描述,电面的时候也出现过. 不考虑细节的话,此题就是一个简单的查找问题.对于查找问题而言,使用散列表来处理往往是一种效率比较高的方案. 但是,如果你在面试中回答使用散列表,接下来面试官肯定会问你:然后呢?如果你不能回答个所以然,面试官就会面无表情的通

.net 4.5版本WebRequest和Webclient中的一个url转义bug

有时我们把一个url带入到另一个url中作为参数,这个参数就需要转义.比如: http://www.baidu.com/s?wd=http%3A%2F%2Fwww.baidu.com 在代码中进行访问这段地址的时候,我们也会期望它照着给的地址访问,在.net 4.0中,确实会如此. 但是如果切换为.net 4.5版本,你就会发现你访问的url实际变成了: http://www.baidu.com/s?wd=http:%2F%2Fwww.baidu.com 大多数情况下它不会造成什么影响. 但一旦

Joomla的Url中去除index.php

最近在研究Joomla系统(一个著名的CMS系统),安装之后发现页面的URL中始终有一个index.php存在,感觉非常碍眼,决心将其除之而后快,废话少说,下面以2.5版本为例奉上去除步骤. 1. 登录管理后台,在"Site"->"Global Configuration"->"Site"中的"SEO Settings"中全部勾选"Yes": 2. 创建.htaccess文件:将Joomla安装

记一次400错误引发的血案(URL中特殊符号的转义/400 bad request错误)

django+nginx+uwsgi部署的站点访问某个URL时发生了400 bad request的错误,而使用django自带的开发版的web server时没有遇到此问题.初步判断是nginx或uwsgi配置问题. 网上有说是因为request header过大而nginx配置的client_header_buffer_size和large_client_header_buffers过小引起的,但就当前的状态来看感觉不太可能.因为request header并不是特别大.至于是别的什么原因还

网址URL中特殊字符转义编码

网址URL中特殊字符转义编码 字符    -    URL编码值 空格    -    %20 "          -    %22 #         -    %23 %        -    %25 &         -    %26 (          -    %28 )          -    %29 +         -    %2B ,          -    %2C /          -    %2F :          -    %3A ;  

在Salesforce中对某一个Object的Standard Button或Link进行重写

在Salesforce中可以对某一个Object的Standard Button或Link进行重写,来实现我们特定的逻辑过程,比如:在删除某个Object之前要判断该Object的某个Field的状态:或者在New一个Object的时候要对一些Field进行预赋值. 1):如下图所示,展现了一个Object中所有的Button,Link和Action,那么用红框框出来的便是Standard的 2):这里我们以New按钮为例进行展示,点击上图中New前方所对应的Edit操作,会出现下面图示,默认状

解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细(转)

原文链接:解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细 题目 一步一步解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细. 解答 这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP地址. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 浏览器获取请求页面的html代码. 浏览器在显示窗口内渲染H

Javascript RegExp对象---获取url中某一个参数的值

RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes实例:window.location.href:http://localhost:8100/aspx/main/ServiceCenter_list.aspx?category_id=93&page=2要匹配到的category_id=93:/category_id=\d+/g 创建 RegExp 对象的语法: new RegExp(pattern, at