代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

从php中的URL获取片段(散列“”后的值)

  •  83
  • ilija veselica  · 技术社区  · 14 年前

    如何从php中的URL获取片段(哈希后的值)?

    说从 http://domain.com/site/gallery/1#photo45 我想要 photo45

    10 回复  |  直到 5 年前
        1
  •  103
  •   Community Egal    7 年前

    如果您想在用户浏览器中显示的散列标记或锚之后获取该值:“标准”HTTP不可能这样做,因为该值从未发送到服务器(因此在 $_SERVER["REQUEST_URI"] 或类似的预定义变量)。您需要在客户端使用某种JavaScript魔力,例如将该值作为post参数。

    如果只是解析任何来源的已知URL,那么 answer by mck89 不过很好。

        2
  •  37
  •   mck89    14 年前

    这个部分叫做“片段”,你可以这样得到它:

    $url=parse_url("http://domain.com/site/gallery/1#photo45 ");
    echo $url["fragment"]; //This variable contains the fragment
    
        3
  •  29
  •   jave.web    9 年前

    a)已经有了php中带有哈希的url?容易的!把它分析出来!

    if( strpos( $url, "#" ) === false ) echo "NO HASH !";
       else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
    

    或者在“old”php中,必须预先存储分解后的数组才能访问:

    $exploded_url = explode( "#", $url ); $exploded_url[1]; 
    

    b)您想通过向PHP发送表单来获取散列值吗?
    =>使用一些javascript魔法!(预先处理表格)

    var forms = document.getElementsByTagName('form'); //get all forms on the site
    for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form...
    function(){ //add a submit pre-processing function that will:
        var hidden = document.createElement("input");  //create an extra input element
        hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view 
        hidden.setAttribute('name','fragment');  //set a name to get by it in PHP
        hidden.setAttribute('value',window.location.hash); //set a value of #HASH
        this.appendChild(hidden); //append it to the current form
    });
    

    取决于你的 form method 属性通过以下方式在php中获取此哈希:
    $_GET['fragment'] $_POST['fragment']

    可能的回报: 1。 "" [空字符串](无哈希)2.整个哈希包括 # [哈希]符号(因为我们使用了 window.location.hash 在javascript中,它就是这样工作的:)

    c)您想在PHP中获取哈希 只是 从请求的URL?

    你不能!

    …(考虑常规HTTP请求时不考虑…)

    …希望这有帮助:)

        4
  •  9
  •   Bronson    11 年前

    我已经为这个寻找了一个解决方法——我唯一找到的就是使用URL重写来读取“锚”。我在这里的Apache文档中找到的 http://httpd.apache.org/docs/2.2/rewrite/advanced.html 以下内容…

    默认情况下,重定向到HTML定位点不起作用,因为mod诳rewrite会避开诳字符,将其转换为%23。 这反过来又破坏了重定向。

    解决方案:在重写器上使用[ne]标志。ne代表no 逃跑。

    讨论:这项技术当然也适用于其他特殊的 默认情况下,mod_重写的字符是url编码的。

    它可能还有其他的注意事项,而不是……但我认为至少可以在服务器上使用进行一些操作。

        5
  •  4
  •   Ignacio Vazquez-Abrams    14 年前

    散列标记 . 它不会在请求中发送到服务器。

        6
  •  3
  •   jihchuan    12 年前

    我发现了这个技巧,如果你坚持要php的值…… 拆分锚()值并用javascript获取,然后存储为cookie,然后用php获取cookie值~

    http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

        7
  •  2
  •   JJ Labajo    6 年前

    您需要先解析URL,这样就可以:

    $url = "https://www.example.com/profile#picture";
    $fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
    

    如果需要解析当前浏览器的实际URL,则需要请求调用服务器。

    $url = $_SERVER["REQUEST_URI"];
    $fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
    
        8
  •  0
  •   Christopher Grigg    7 年前

    您可以在客户端进行字符串替换,然后在服务器端进行字符串替换。不是特别强大的解决方案,但如果你不能像我这样快速解决方案,我想就足够了。

    客户:

    var tempString = stringVal.replace('#', 'hashtag');
    

    服务器:

    $user_message = $_GET['userMessage'];
    $user_message = str_replace("hashtag", "#", $user_message);
    
        9
  •  0
  •   Boris Javier Barrera    5 年前

    您可以通过结合使用javascript和php来实现:

    <div id="cont"></div>
    

    在另一边;

    <script>
    var h = window.location.hash;
    var h1 = (win.substr(1));//string with no #
    var q1 = '<input type="text" id="hash" name="hash" value="'+h1+'">';
    
    setInterval(function(){
    if(win1!="")
    {
    document.querySelector('#cont').innerHTML = q1;
    } else alert("Something went wrong")
    },1000);
    </script>
    

    然后,在表单提交时,您可以通过$_post['hash']检索值(设置表单)

        10
  •  -4
  •   JamesAD-0    7 年前

    在查询字符串中的哈希标记后获取数据很简单。下面是一个例子,当客户从一本书中访问术语表时使用。它采用锚定交付(特斯拉)的名称,并将客户交付至该术语,并用蓝色突出显示术语及其说明,以便易于查看。

    a.用一个DIV ID设置字符串,这样名称锚就可以定位到它应该定位的地方,JavaScript可以更改文本颜色。

    <div id="tesla">Tesla</div>
    <div id="tesla1">An energy company</div>
    

    b.使用javascript在服务器端、插入php页面或任何地方完成繁重的工作。

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    

    我在加载页面时自动启动Java函数。

    <script>
    $( document ).ready(function() {
    

    d.从服务器接收到的URL获取锚(Tesla)

    var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
    

    e.删去散列符号。

    myhash1 = myhash1.substr(1)  //myhash1 == tesla
    

    f.我需要强调术语和描述,以便创建新的VaR

    var myhash2 = '1';
    myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
    

    g.现在我可以操作术语和描述的文本颜色。

    var elem = document.getElementById(myhash1);
    elem.style.color = 'blue';
    elem = document.getElementById(myhash2);
    elem.style.color = 'blue';
    });
    </script>
    

    这是有效的。客户机单击客户机端的链接(xyz.com特斯拉),然后直接进入术语。术语和描述由javascript以蓝色突出显示,以便快速阅读。所有其他条目均为黑色。