Laravel 没有 & 的 getQueryString()
Laravel getQueryString() without &
我正在尝试将包含 URL 的一部分的变量输出到我页面上的 Javascript 中。当我这样做时,它会将任何 &
更改为 &
,这会破坏 URL.
我试过使用 str_replace
、html_entity_decode
、htmlspecialchars_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>
这是结果:
尝试使用 rawurldecode 应该可以修复它。
而不是 blade {{ $input }}
只是使用 <?php echo $input ?>
和 link 渲染而不将 &
更改为 &
。所以这只是 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);
}
结果:
使用 blade 模板时,{{ $variable }}
将正确编码任何不应直接放在 HTML 中的字符。由于您将此变量放在 Javascript 中,因此您不希望这种情况发生。
最简单的解决方案是禁用 HTML-encoding:{{!! $variable !!}}
。
但这不是完整的解决方案。您需要确保变量不会盲目输出,因为如果它包含单引号,它会破坏您的 Javascript.
完整的解决方案是对单引号字符串进行转义:
{{!! addcslashes($input, "'") !!}}
尝试使用
{!! url('?param1=test¶m2=test2¶m3=kiswahili') !!}
而不是使用
{{ url('?param1=test¶m2=test2¶m3=kiswahili') }}
我正在尝试将包含 URL 的一部分的变量输出到我页面上的 Javascript 中。当我这样做时,它会将任何 &
更改为 &
,这会破坏 URL.
我试过使用 str_replace
、html_entity_decode
、htmlspecialchars_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>
这是结果:
尝试使用 rawurldecode 应该可以修复它。
而不是 blade {{ $input }}
只是使用 <?php echo $input ?>
和 link 渲染而不将 &
更改为 &
。所以这只是 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);
}
结果:
使用 blade 模板时,{{ $variable }}
将正确编码任何不应直接放在 HTML 中的字符。由于您将此变量放在 Javascript 中,因此您不希望这种情况发生。
最简单的解决方案是禁用 HTML-encoding:{{!! $variable !!}}
。
但这不是完整的解决方案。您需要确保变量不会盲目输出,因为如果它包含单引号,它会破坏您的 Javascript.
完整的解决方案是对单引号字符串进行转义:
{{!! addcslashes($input, "'") !!}}
尝试使用
{!! url('?param1=test¶m2=test2¶m3=kiswahili') !!}
而不是使用
{{ url('?param1=test¶m2=test2¶m3=kiswahili') }}