preg_replace, чтобы очистить мои имена файлов изображений

Я получу прямо в это ….

У меня проблема с моим ajax livesearch, использующим xml для своего рода функции поиска изображений инвентаризации, код видит имена файлов изображений, импортированные в файл xml для использования в livesearch, однако имена файлов изображений с некоторыми специальными символами, такими как "-" заставляет livesearch не работать. Я предоставил код ниже …

Я хотел бы сделать код в preg_replace для очистки имен файлов этих типов специальных символов, в идеале использовать только буквы, цифры, точки и знак доллара. Я не уверен, разумно ли очищать имена файлов до того, как они будут импортированы в XML-файл, или очистить их потом? Любая помощь приветствуется, спасибо.

<?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

Решение

Это может быть достигнуто с 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]