2017-06-07 21 views
0

我想輸出一個變量包含一部分的URL到我的網頁上的Javascript。當我這樣做時,它會將&更改爲&,這會破壞URL。Laravel getQueryString()與出&

我使用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

回答

1

在使用刀片模板,{{ $variable }}將正常編碼任何不應該是p的字符直接綁定在HTML中。既然你把這個變量放在Javascript中,你不希望發生這種情況。

最簡單的解決方案是禁用HTML編碼:{{!! $variable !!}}

但這不是完整的解決方案。你需要確保變量不是盲目輸出,因爲如果它包含單引號,它會打破你的Javascript。

的完整的解決方案是逃避單引號的字符串:

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

謝謝你的幫助。 –

1

嘗試使用rawurldecode應該定勢它。

+0

不幸結果是這樣'http://127.0.0.1:8000/data?make[]=TOYOTA &模型[] =威姿' –

+0

&仍然存在,而不是&,這怎麼可能。它只是打動了我的腦海! –

+0

你嘗試過沒有使用任何解碼器?只需{{url(「/ data」)。「?」。$ input}}? –

-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

+0

爲了這是一個有用的答案,它需要重寫。請提供您的代碼示例以顯示您更改的內容。 –

+0

看起來你的解決方案是不正確地編碼字符串,如果輸出字符串中的某些字符會導致失敗。 –

+0

@Michelangelo由於某種原因,當我使用刀片模板'{{$ input}}'時,它總是將'&'轉到'&',但是當我使用普通的php時,它會正確地鏈接出任何編碼。 –