Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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
Php HTML中图像的ALT文本_Php_Html_Xhtml_Accessibility - Fatal编程技术网

Php HTML中图像的ALT文本

Php HTML中图像的ALT文本,php,html,xhtml,accessibility,Php,Html,Xhtml,Accessibility,我们正在开发一个拥有大量图像的网站,其中一个要求是每个图像都有ALT文本(JPG、JPEG、PNG、GIF等)。因此,每当HTML显示图像时,该图像的ALT文本也会与IMG SRC一起写入HTML 在我们与开发人员讨论之后,出现的解决方案是 1) 创建一个新表以保存所有这些图像名称。然后,每次使用图像时,都会执行db查找并添加适当的ALT文本 2) 另一种解决方案是在每个文件中写入一些EXIF信息,每次使用这些信息时,文件的EXIF信息都会被读取,并根据需要添加到HTML中 关于如何进行的任何建

我们正在开发一个拥有大量图像的网站,其中一个要求是每个图像都有ALT文本(JPG、JPEG、PNG、GIF等)。因此,每当HTML显示图像时,该图像的ALT文本也会与IMG SRC一起写入HTML

在我们与开发人员讨论之后,出现的解决方案是

1) 创建一个新表以保存所有这些图像名称。然后,每次使用图像时,都会执行db查找并添加适当的ALT文本

2) 另一种解决方案是在每个文件中写入一些EXIF信息,每次使用这些信息时,文件的EXIF信息都会被读取,并根据需要添加到HTML中

关于如何进行的任何建议。有很多图像,所以我们正在寻找服务器负载和加载时间最少的最佳解决方案

附加信息-我们在服务器上运行PHP来选择图像等


谢谢

我建议将其存储在数据库中,因为我确信您必须维护这些图像的记录,向表中添加另一列几乎不需要什么工作。此外,如果它在数据库中,您可以在alt文本上执行搜索,以防您想要有这样的功能。

我将排除EXIF,因为它不支持PNG和GIF

db查找听起来不错(对我来说),而且可以扩展(只要你做得很聪明)。例如,您应该尽量减少查找


您甚至可能已经有了一些这样的数据,而且不管怎样,拥有关于图像的数据将是非常有用的

我建议使用数据库选项,因为如果某个图像必须以某种方式与另一个图像切换,那么EXIF选项将成为一个问题(传输EXIF数据并非易事),另外,在每个请求上解析大量图像文件将非常耗费资源

但无论是使用数据库还是EXIF选项,我强烈建议您生成一个php文件作为缓存,并使用image\u name=>alt\u text的关联数组,因为您不希望在每个页面加载上有30个sql查询。php文件将作为引导程序包含,因此每个脚本都可以通过一个全局变量访问关联数组


您将拥有一个生成此文件的脚本,因此每当更改alt文本时,您都可以轻松地重新生成包含关联数组的缓存文件。

我将避免选择2,因为如果您要更新alt文本,您还需要每次写入图像文件,如果您想处理图像,例如生成缩略图,元数据可能会丢失

选项1似乎最符合逻辑,如果您要从数据库查询文件名,则只需同时获取alt文本。

可能是第三个选项:

  • 在文件名中存储ALT文本:)

虽然这两种解决方案对我来说都很好,但关于所需负载的问题有点棘手:如果您从数据库中获取图像,我也会将alt标记值存储在数据库中。如果文件是从目录提供的,则取决于您是否使用数据库。如果不使用数据库,那么EXIF路由听起来是一个合理的选择,但是可能会比使用其他数据库产生更多的负载,因为您需要打开每个文件来检索EXIF数据


简言之,如果您已经使用了数据库,请选择数据库路线。

诚实的问题:您真的需要创建一个新表吗?如果您使用的是PHP上传机制,那么您不能简单地向数据库添加一个新字段并添加alt文本,然后根据需要将其作为变量链接吗?从这里开始,PHP将非常简单。只是一个想法

如果您已经有了一个数据库(我想您已经有了),那么不要添加一个全新的表,只需在图像所在的现有表中添加一列即可。然后,您就可以通过填充页面的同一查询获取所有信息。我相信这是最好的选择。

如果你不想给图片一个alt文本

我不应该是“image的alt text”或“image.jpg”。更确切地说,它应该像“Stackoverflow.com有很多问题和答案。”当显示SO屏幕截图时。但是,如果您的图像不能有一个有意义的alt文本,那么只需使用alt=“”,然后继续,有时候不使用alt文本比使用糟糕的alt文本要好


因此,您应该为每个意味着某个内容的图像存储alt文本,而不是放入无意义的alt文本(排除EXIF信息)。

如果您可以使用与文件名匹配的alt标记,您可以使用一些javascript获取所有图像,并根据文件名添加alt标记

大概是这样的:

    //get all the img tags
    var images = document.getElementsByTagName('img');    
    for (i=0;i<images.length;i++)
    {
      //get the filename from the src
      filename = images[i].src.substring(images[i].src.lastIndexOf('/')+1,images[i].src.lastIndexOf('.'));
      //do any formatting here
      filename = filename.replace('_',' ');
      //set alt/title tags
      images[i].setAttribute('alt', filename);
      images[i].setAttribute('title', filename);
    }
//获取所有img标记
var images=document.getElementsByTagName('img');
对于(i=0;i当你说“很多图像”时,我们谈论的是多少?数百还是数千

如果您有数百个,我只需要创建一个带有imagePath/altText对数组的PHP文件。然后在引用图像的任何位置包含此PHP文件。要抽象实现,请在PHP文件中使用一个方法,在给定完整图像路径的情况下返回altText


$texthash = array(
  "/some/path/imageName.png" => "some alt text"
, "/some/path/imageName2.png" => "some other alt text"
);

function get_alt_text($imgpath) {
  return $texthash($imgpath);
}
此策略速度很快,只要图像数量仍然相对较少,就不会降低页面速度。唯一棘手的部分是确保在添加新图像时按图像路径对数组进行排序

一旦图像的数量变得足够大以至于此方法会降低性能,请将信息移动到数据库中,并更改PHP文件中的方法以查询数据库。由于您已经抽象了实现,因此不需要更改任何引用的PHP文件


在HTML中使用alt文本之前,还要确保您正在对其进行HTML转义。

获取附加数据(在选项1中)是否需要对数据库进行附加调用?换句话说,是否已经存在与每个图像相关联的数据库记录,您只需