这段代码的意图是在http:// URL不安全的情况下,将HTML属性'data-original-src'添加到img-tag中。但是没有生成此属性。
出了什么问题,我忽略了什么错误? 无论如何,str_replace()就像魅力一样。
public function parse($string) {
if($this->settings['camo_enabled'] == true) {
$doc = new DOMDocument();
$doc->loadHTML($string);
$images = $doc->getElementsByTagName('img');
//$imgarray = array();
foreach ($images as $image) {
$url = $image->getAttribute('src');
if(substr($url, 0, 8) != 'https://') {
$image->setAttribute('data-original-src', $url);
$camo = $this->proxy_url($url);
$string = str_replace($image->getAttribute('src'), $camo, $string);
unset($url, $camo);
}
}
}
return $string;
}
答案 0 :(得分:1)
我认为问题产生的原因是您在返回之前忘记修改传递给调用library(sf)
library(sp)
## using a MULTIPOLYGON data set supplied with library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
## convert the geometry of the `sf` object to SpatialPolygons
spd <- sf::as_Spatial(st_geometry(nc), IDs = as.character(1:nrow(nc)))
class(spd)
# [1] "SpatialPolygons"
# attr(,"package")
# [1] "sp"
## grab the data from the sf object
df <- nc
df$geometry <- NULL
df <- as.data.frame(df)
## create the SpatialPolygonsDataFrame
spd <- sp::SpatialPolygonsDataFrame(spd, data = df)
class(spd)
# [1] "SpatialPolygonsDataFrame"
# attr(,"package")
# [1] "sp"
head(spd@data)
# AREA PERIMETER CNTY_ CNTY_ID NAME FIPS FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
# 1 0.114 1.442 1825 1825 Ashe 37009 37009 5 1091 1 10 1364 0 19
# 2 0.061 1.231 1827 1827 Alleghany 37005 37005 3 487 0 10 542 3 12
# 3 0.143 1.630 1828 1828 Surry 37171 37171 86 3188 5 208 3616 6 260
# 4 0.070 2.968 1831 1831 Currituck 37053 37053 27 508 1 123 830 2 145
# 5 0.153 2.206 1832 1832 Northampton 37131 37131 66 1421 9 1066 1606 3 1197
# 6 0.097 1.670 1833 1833 Hertford 37091 37091 46 1452 7 954 1838 5 1237
的方法的$string
变量。按如下方式提交您的更改:
saveHTML()
有关详细信息,请参阅official documentation。
另一方面,由于您在public function parse($string)
{
if ($this->settings['camo_enabled'] == true)
{
$doc = new DOMDocument();
$doc->loadHTML($string);
$images = $doc->getElementsByTagName('img');
foreach ($images as $image)
{
$url = $image->getAttribute('src');
if (substr($url, 0, 8) != 'https://')
{
$image->setAttribute('data-original-src', $url);
$camo = $this->proxy_url($url);
$string = str_replace($image->getAttribute('src'), $camo, $string);
unset($url, $camo);
}
}
}
$string = $doc->saveHTML();
return $string;
// The two lines above can also be simply rewritten as:
// return $doc->saveHTML();
}
变量和解析后的HTML文件中都进行了更改,因此请修改此行,坚持后者:
$string
成:
$string = str_replace($image->getAttribute('src'), $camo, $string);