preg_replace来清理我的图像文件名

时间:2014-11-18 18:13:02

标签: php xml preg-replace filenames strip

我会直接进入它......

我的ajax livesearch存在问题,使用xml作为一种库存图片搜索功能,代码将图像文件名导入到xml文件中以供在livesearch中使用,但是,图像文件名包含一些特殊字符,如a "-"导致livesearch无效。我提供了以下代码......

我想要做的是preg_replace中的代码来清理这些类型的特殊字符的文件名,理想情况下只使用字母,数字,句点和美元符号。我不确定在将文件名导入xml文件之前清理文件名还是之后清理文件名是否明智?感谢任何帮助,thx。

<?php

$path_to_image_dir = 'images'; // relative path to your image directory


$xml_string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<images> 
</images>
XML;

$xml_generator = new SimpleXMLElement($xml_string);

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_image_dir));
foreach($it as $path => $file) {
    if($file->isDir()) continue; // skip folders
    list( $width, $height ) = getimagesize($path);
    $image = $xml_generator->addChild('image');
    $image->addChild('path', $path);
    $image->addChild('thumbnail', "<img src='$path' />");
}

$file = fopen('data.xml','w');
fwrite($file, $xml_generator->asXML());
fclose($file);?>

<!-- php code for initiating instant search of xml data file -->

<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("data.xml");

$x=$xmlDoc->getElementsByTagName('image'); //used to be link, now image, could be images

//get the q parameter from URL
$q=$_GET["q"];


//lookup all links from the xml file if length of q>0
if (strlen($q)>0) {
  $hint="";
  for($i=0; $i<($x->length); $i++) {

    $y=$x->item($i)->getElementsByTagName('path');
    $z=$x->item($i)->getElementsByTagName('thumbnail');
    $w=$x->item($i)->getElementsByTagName('image');
    if ($y->item(0)->nodeType==1) {
      //find a link matching the search text
      if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
        if ($hint=="") {
           $hint="<a style='font: bold 16px/18px century gothic, serif;' href=' 
           ".$y->item(0)->childNodes->item(0)->nodeValue."' target='_blank'>
           ".$y->item(0)->childNodes->item(0)->nodeValue."<br>
           ".$z->item(0)->childNodes->item(0)->nodeValue." <br><br>
        ";
        }
      else
        {
         $hint=$hint ."<a style='font: bold 16px/18px century gothic, serif;' href=' 
         ".$y->item(0)->childNodes->item(0)->nodeValue."' target='_blank'>
         ".$y->item(0)->childNodes->item(0)->nodeValue."<br>
         ".$z->item(0)->childNodes->item(0)->nodeValue." <br><br>
        ";
        }
      }
    }
  }
}

// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint=="") {
  $response="Search found ' 0 ' matches";
} else {

  $response=$hint;
}

//output the response
echo $response;
?>

我尝试添加它来清理文件名,但它没有工作:

function clean($string) {
   $string = str_replace('-', 'test', $string); 

   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); 
}

//然后将回声更改为此...(但没有像我计划的那样工作,

echo clean ($response);

1 个答案:

答案 0 :(得分:0)

这可以通过str_replace()

来完成
function clean($string) {
    $forbidden = array('-','#', ',');
    $clean = str_replace($forbidden, '_', $string);

   return $clean; 
}

实施:

   echo clean('test-img-101.png'); //outputs test_img_101.png