从在codeigniter中有slace的url获取参数

时间:2018-05-02 11:49:10

标签: php codeigniter url

我的网址如下

http://localhost/demo/company/warehouse_subportal/printEway/CN/00003

我的发票号码是CN / 00003,有时是CN-00003。  我想要的是从URL获取发票。现在我只得到CN。我知道那是因为/。如何获得CN / 00003的发票?请提前帮助我。

4 个答案:

答案 0 :(得分:1)

您可以在生成链接或网址示例时使用urlencode

<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>

然后使用urldecode解码发票值,例如:

<?php
$query = "my=apples&are=green+and+red";

foreach (explode('&', $query) as $chunk) {
    $param = explode("=", $chunk);

    if ($param) {
        printf("Value for parameter \"%s\" is \"%s\"<br/>\n", urldecode($param[0]), urldecode($param[1]));
    }
}
?>

请注意,只需要对发票部分进行编码或解码,即

部分
  

CN / 00003

另一种可能的解决方案是使用base64编码为base64_encode,例如:

<?php
$str = 'This is an encoded string';
echo base64_encode($str);
?>

并使用base64_decode对其进行解码,例如:

<?php
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str);
?>

答案 1 :(得分:0)

<?php

$data='http://localhost/demo/company/warehouse_subportal/printEway/CN-00003';

$data=explode('/',$data);

if(is_numeric(array_values(array_slice($data, -1))[0])){
    $invoice=implode(array_slice($data, -2, 2, true),'/');

}
else{
    $invoice=array_values(array_slice($data, -1))[0];
}

echo $invoice;

所以基本上我检查网址的最后一个字段,看看它是否只包含数字或字母,并根据响应我回显正确的值。

适用于/和 -

答案 2 :(得分:0)

您可以使用细分。

if(strpos($this->uri->segment(4), '-') !== FALSE){
   $invoice_num = $this->uri->segment(4);
}
else {
   $invoice_num = $this->uri->segment(4).'/'.$this->uri->segment(5);
}

https://www.codeigniter.com/user_guide/libraries/uri.html#CI_URI::segment

答案 3 :(得分:0)

编码&amp;解码参数将解决您的问题。

例:

准备网址时:

$invoice_number = urlencode("CN/00003") // Or "CN-00003"

$url = "http://localhost/demo/company/warehouse_subportal/printEway/" . $invoice_number

从网址获取发票号码:

$invoice_number = urldecode($this->uri->segment(4));