Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.getElementByID.InnerHTML注入无效字符_Javascript_Php_Html_Innerhtml_Exif - Fatal编程技术网

Javascript document.getElementByID.InnerHTML注入无效字符

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

我已经找了三天这个问题了-我尝试了任何接近或相关的东西,看看我是否能让它工作

我使用PHP从JPG文件中提取EXIF标记

在一个简单的鼠标悬停脚本中使用它,但这就是它的缺点:

获取EXIF数据

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字符(不太可能或取决于浏览器)

我建议您检查以下各项:

  • Unicode字符需要正确,并且模块mbstring必须可用。如果您必须处理来自需要不同设置的不同系统的图像,则说明文件的可读性不好

  • 一个具有明显限制的快速解决方案是,通过删除NUL和替换字符,将标记字符串转换为US-ASCII,或至少转换为拉丁8位八位组

    function annul(s)
    {   return s.replace(/[\u0000|\uFFFD]/g, "");
    }
    
  • 这至少清理了帖子中的字符串,但不会还原任何Unicode字符

  • 更难的方法是从标记字符串中返回的字符对中重建Unicode 16值。必须这样做意味着PHP存在严重问题,或者图像文件编码不好,或者两者都不好,并且可能无法在所有情况下工作

  • 理想情况是为Unicode设置PHP exif.ini,并使用适合该设置的编码声明正确标记所有图像


  • 决定采取什么行动在很大程度上取决于您的站点是否支持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, "");
    }