在php laravel中

时间:2017-11-13 14:19:29

标签: javascript php laravel-5

我在位置数据库中有一个地址字段,值为Shop 2197 - Block 1014 - Road 90 - Al-Delaa' Complex - Hamala,该网站运行良好,直到我添加了此地址的位置,谷歌地图插件不再有效,因为此单引号导致了控制台中的javascript错误,

我的位置控制器获取功能:

public static function get() {
    $locations = Location::with('country')->get();

    return $locations;
}

我的用于将位置加载到Google地图的脚本:

var locations = JSON.parse('{!! $locations !!}');
  var lang = "{{ App::getLocale() }}";
  $(locations).each(function(key, value) {
    allLocationsPins.push({lat: parseInt(value.latitude), lng: parseInt(value.longitude)});
  });

地址值中的单引号导致此错误,因为它未被转义。我尝试将JSON encode函数添加到locations数组,然后从控制器返回,但没有任何反应,我认为Json_encode转义单引号是不行的,因为{!!脚本文件中的$ locations !!},但如果我试图删除{!! !!}字符串中的每个字符都会发生变化。

我该如何解决这个问题?如果json_encode无效,我还可以使用其他什么?

我试图在forloop中的单引号之前添加\,但由于某种原因它没有做任何事情,这里是forloop和输出。

public static function get() {
        $locations = Location::with('country')->get();

        foreach ($locations as $location) {
            $location["address"] = str_replace("'","\'",$location["address"]);
        }
        var_dump($locations);
        return $locations;
    }


// PART OF VAR DUMP OUTPUT..

array(14) {
        ["id"]=>
        int(7)
        ["title"]=>
        string(6) "Hamala"
        ["title_ar"]=>
        NULL
        ["address"]=>
        string(62) "Shop 2197 - Block 1014 - Road 90 - Al-Delaa\' Complex - Hamala"
        ["address_ar"]=>
        NULL
        ["latitude"]=>
        string(9) "26.166246"
        ["longitude"]=>
        string(9) "50.468510"
        ["phone_numbers"]=>
        string(13) "+973 17610612"
        ["customer_service_email"]=>
        string(28) "Marketing@aljasser-group.net"
        ["working_hours"]=>
        string(84) "From 09:00 AM to 01:00 PM | Evening Shift: From 04:00 PM to 08:00 PM | Friday is off"
        ["working_hours_ar"]=>
        NULL
        ["country_id"]=>
        int(3)
        ["created_at"]=>
        string(19) "2017-11-13 16:21:15"
        ["updated_at"]=>
        string(19) "2017-11-06 19:01:54"
      }
      ["original":protected]=>
      array(14) {
        ["id"]=>
        int(7)
        ["title"]=>
        string(6) "Hamala"
        ["title_ar"]=>
        NULL
        ["address"]=>
        string(61) "Shop 2197 - Block 1014 - Road 90 - Al-Delaa' Complex - Hamala"
        ["address_ar"]=>
        NULL
        ["latitude"]=>
        string(9) "26.166246"
        ["longitude"]=>
        string(9) "50.468510"
        ["phone_numbers"]=>
        string(13) "+973 17610612"
        ["customer_service_email"]=>
        string(28) "Marketing@aljasser-group.net"
        ["working_hours"]=>
        string(84) "From 09:00 AM to 01:00 PM | Evening Shift: From 04:00 PM to 08:00 PM | Friday is off"
        ["working_hours_ar"]=>
        NULL
        ["country_id"]=>
        int(3)
        ["created_at"]=>
        string(19) "2017-11-13 16:21:15"
        ["updated_at"]=>
        string(19) "2017-11-06 19:01:54"
      }

正如你所看到的那样,地址位置数组是第一个被发现的两倍,它被改变了预期,第二个被保护并且没有改变问题就在这里就是is line

["address"]=>
        string(61) "Shop 2197 - Block 1014 - Road 90 - Al-Delaa' Complex - Hamala"

2 个答案:

答案 0 :(得分:0)

您可以使用:

return str_replace("'", "\\\\'", $locations->toJson());

(如果->get()无效,您可能必须从有说服力的查询中移除->toJson()。)

来源:https://laravel.com/docs/5.5/eloquent-serialization#serializing-to-json

答案 1 :(得分:0)

如果你的字符串有一个引号,你传递给JSON.parse()的字符串变量将不起作用,因为该方法不接受它们。

首先尝试将'{!! $locations !!}'声明为变量,然后再进行解析,看看是否有效,不应该。{/ p>

您必须使用\'

手动转义单引号

示例:

var aString = '{ "name":"John", "age":30, "city":"New\'York"}'
var aJson = JSON.parse(aString)