Laravel getQueryString()with out&

时间:2017-06-07 03:15:25

标签: laravel-blade

我试图将包含部分网址的变量输出到我的网页上的Javascript中。当我这样做时,它会将&更改为&,这会破坏网址。

我已尝试使用str_replacehtml_entity_decodehtmlspecialchars_decode,但结果始终相同&而不是&

我如何使用&代替&来获取它?

这是我的控制者:

//here we catch the query
public function index(Request $request)
    {
        $input   = $request->getQueryString();

        return view('lots.browse')->withInput($input);
    }

// here we filter the ajax request
public function indexData(LotFilters $filters)
    {
       $lots  = Lot::filter($filters);

        return Datatables::eloquent($lots)->make(true);
    }

这是我的观点:

<!-- Datatables -->
    <script type="text/javascript">
        $(document).ready(function(){
            $('#table').DataTable({
                searching: false,
                processing: true,
                serverSide: true,
                ajax: '{{  url("/data") . "?" .  html_entity_decode($input) }}',
                columns: [
                    { data: 'date', name: 'date' },
                    { data: 'bid', name: 'bid' },
                    { data: 'auction_name', name: 'auction_name' },
                    { data: 'pics_urls', name: 'pics_urls' },
                    { data: 'company', name: 'company' },
                    { data: 'model_name_en', name: 'model_name_en' },
                    { data: 'model_type_en', name: 'model_type_en' },
                    { data: 'grade_en', name: 'grade_en' },
                    { data: 'mileage_en', name: 'mileage_en' },
                    { data: 'model_year_en', name: 'model_year_en' },
                    { data: 'color_en', name: 'color_en' },
                    { data: 'displacement', name: 'displacement' },
                    { data: 'transmission_en', name: 'transmission_en' },
                    { data: 'scores_en', name: 'scores_en' },
                    { data: 'start_price_en', name: 'start_price_en' },
                    { data: 'result_en', name: 'result_en' }
                ]
            });
        });
    </script>

这就是结果:

enter image description here

4 个答案:

答案 0 :(得分:1)

尝试使用rawurldecode它应该修复它。

答案 1 :(得分:1)

使用刀片模板时,{{ $variable }}会正确编码任何不应直接放在HTML中的字符。由于您将此变量放在Javascript中,因此您不希望这种情况发生。

最简单的解决方案是禁用HTML编码:{{!! $variable !!}}

但这不是完整的解决方案。你需要确保变量不是盲目输出的,因为如果它包含单引号,它将破坏你的Javascript。

完整的解决方案是使用单引号转义字符串:

{{!! addcslashes($input, "'") !!}}

答案 2 :(得分:0)

尝试使用 {!! url('?param1=test&param2=test2&param3=kiswahili') !!}

代替使用

{{ url('?param1=test&param2=test2&param3=kiswahili') }}

答案 3 :(得分:-1)

代替{{ $input }}仅使用了<?php echo $input ?>,并将呈现与&更改为&amp;。所以这只是blade.php的问题,我不知道为什么会这样,但我终于设法解决了我的问题。

所以这是我的剧本:

<script type="text/javascript">
        $(document).ready(function(){
            $('#table').DataTable({
                searching: false,
                processing: true,
                serverSide: true,
                ajax: "<?php echo '/data?' .  $input ?>",
                columns: [
                    { data: 'date', name: 'date'},
                    { data: 'bid', name: 'bid' },
                    { data: 'auction_name', name: 'auction_name' },
                    { data: 'pics_urls', name: 'pics_urls' },
                    { data: 'company', name: 'company' },
                    { data: 'model_name_en', name: 'model_name_en' },
                    { data: 'model_type_en', name: 'model_type_en' },
                    { data: 'grade_en', name: 'grade_en' },
                    { data: 'mileage_en', name: 'mileage_en' },
                    { data: 'model_year_en', name: 'model_year_en' },
                    { data: 'color_en', name: 'color_en' },
                    { data: 'displacement', name: 'displacement' },
                    { data: 'transmission_en', name: 'transmission_en' },
                    { data: 'scores_en', name: 'scores_en' },
                    { data: 'start_price_en', name: 'start_price_en' },
                    { data: 'result_en', name: 'result_en' }
                ]
            });
        });
    </script>

我的控制员:

public function index(Request $request)
    {
        $input   = $request->getQueryString();

        return view('lots.browse')->withInput($input);
    }

结果:

enter image description here