我在位置数据库中有一个地址字段,值为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"
答案 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)