Javascript document.getElementByID.InnerHTML注入无效字符
我已经找了三天这个问题了-我尝试了任何接近或相关的东西,看看我是否能让它工作 我使用PHP从JPG文件中提取EXIF标记 在一个简单的鼠标悬停脚本中使用它,但这就是它的缺点: 获取EXIF数据Javascript document.getElementByID.InnerHTML注入无效字符,javascript,php,html,innerhtml,exif,Javascript,Php,Html,Innerhtml,Exif,我已经找了三天这个问题了-我尝试了任何接近或相关的东西,看看我是否能让它工作 我使用PHP从JPG文件中提取EXIF标记 在一个简单的鼠标悬停脚本中使用它,但这就是它的缺点: 获取EXIF数据 foreach($images as $img){ $exif = exif_read_data($img, 0, true); 在我的测试过程中,我简化了变量名——我不认为这是必要的,但这就是我现在所处的位置 $Ititle = $exif['IFD0']['Title']; $I
foreach($images as $img){
$exif = exif_read_data($img, 0, true);
在我的测试过程中,我简化了变量名——我不认为这是必要的,但这就是我现在所处的位置
$Ititle = $exif['IFD0']['Title'];
$Isubject = $exif['IFD0']['Subject'];
$Icomment = $exif['IFD0']['Comments'];
$m = "<p>Title: ".$Ititle."<BR>Subject: ".$Isubject."<BR>Comments: ".$Icomment."</p>";
echo $m;
$Ititle=$exif['IFD0']['Title'];
$Isubject=$exif['IFD0']['Subject'];
$Icomment=$exif['IFD0']['Comments'];
$m=“标题:“.ITITITLE.”
主题:“.Isubject.”
注释:“.Icomment.””;
亿美元;
这个Echo$m使Jpg图像的标题/主题/评论看起来与预期一样
因此,我有一个缩略图,使用鼠标盖将大图像“preview1.2.3.4…”更改为您鼠标盖上的img。。。。并将
更改为正确的标题/主题/注释
<img onmouseover="document.getElementById('exifdata<?echo $b;?>').innerHTML = '<?echo $m;?>'; preview<?echo $b;?>.src=img<?echo $p;?>.src" name="img<?echo $p;?>" src="<?echo $img;?>" style="float:left; margin-right:10px; Max-width: 100px; Max-height:100px; width:auto; height:auto;">
.src“name=“img”src=”“style=“float:左;右边距:10px;最大宽度:100px;最大高度:100px;宽度:自动;高度:自动;">
Img和文本更改在滚动时起作用,但
在
中,它显示如下
标题:H�A.�P�P�Y� �C�o�U�P�L�E���
主题:E�N�J�o�Y�我�N�G� �我�N� �s�U�M�M�E�R�s���
评论:
这是文本更改的DIV
<div style="width:680px; height:auto; overflow:hidden; background: rgba(66, 95, 149, 1);">
<p id='exifdata<?echo $b;?>'>testing
</p>
</div>
“>测试
我终于找到了一个解决问题的函数
谢谢!
我尝试了所有不同的编码/解码方法,用不同的程序重新标记到JPG中,我不得不用这种方法去除无效字符。背景
这个问题可能是由于图像文件中的标签格式错误造成的。也就是说,标签文本是用Unicode(16)编写的但是在标记头字段中被列为ASCII。标记格式在2002年和2012年的中进行了描述。如果exif\u read\u data
将所有内容视为ASCII,而不考虑格式标志,则会出现相同的结果
有报道称,图像文件处理软件在Unicode图像标签中引入了漏洞。例如,根据图像历史,KDE漏洞可能仍然是一个问题
� 字符本身是Unicode“替换字符”,代码点为65533十进制,用于替换字符串中的无效字符。对于存储为16位值的ASCII文本,高位字节为零(ASCII NUL字符)并且很可能是被替换的字符。替换发生的地方未经验证–图像标记可能标记为Unicode并包含替换字符(不太可能),exif\u read\u data()
可能正在插入它们(很可能但未经验证),或者浏览器可能正在用替换字符替换NUL字符(不太可能或取决于浏览器)
我建议您检查以下各项:
function annul(s)
{ return s.replace(/[\u0000|\uFFFD]/g, "");
}
决定采取什么行动在很大程度上取决于您的站点是否支持Unicode和全球语言。我的直接想法是,“幸福夫妻”和“享受…”是16位字符串,被解释为8位字符串。鉴于“标题”、“主题”和“评论”“看起来像他们应该做的那样,我建议研究一下
$m=“标题:“.itittle.”
主题:“.Isubject.”
注释:“.Icomment.””;
谢谢-有没有办法回音16位,或者将变量转换成8位?请确认$Isubject=$exif['IFD0']['Subject]的字符串长度;
是您预期的两倍。这将确认问题背后的字符编码问题,并允许以较少的猜测工作得到适当的答案。strlen($Isubject)显示26,字符串打印为� 是26,没有� , 它应该是12-几乎一半…直到我发布后才看到你的回复。
function annul(s)
{ return s.replace(/[\u0000|\uFFFD]/g, "");
}