У меня есть HTML-форма, в которой пользователь может вводить текст в поле title
, тогда у меня есть php, создающий HTML-файл с названием title.html
Моя проблема заключается в том, что пользователи могут вводить пробелы и апострофы в поле заголовка, которые не могут использоваться в имени файла html. Я заменил пробелы символами подчеркивания, используя:
$FileName = str_replace(" ", "_", $UserInput);
Однако я не могу удалить одиночные кавычки? Я пробовал использовать:
$FileName = preg_replace("/'/", '', $UserInput);
но это взяло test's
и превратило его в test\s.html
.
Используя текущий метод str_replace:
$FileName = str_replace("'", "", $UserInput);
Хотя это трудно понять, первым аргументом является двойная кавычка, за которой следует одна цитата, за которой следует двойная кавычка. Второй аргумент – две двойные кавычки, между которыми нет ничего.
С str_replace вы можете даже иметь массив строк, который хотите полностью удалить:
$remove[] = "'"; $remove[] = '"'; $remove[] = "-"; // just as another example $FileName = str_replace( $remove, "", $UserInput );
Вы можете подставить в HTML entitiy:
$FileName = preg_replace("/'/", "\'", $UserInput);
Вы также можете быть более ограничительным при удалении запрещенных символов. Следующее регулярное выражение удалит все символы, которые не являются буквами, цифрами или символами подчеркивания:
$FileName = preg_replace('/[^\w]/', '', $UserInput);
Возможно, вы захотите сделать это, чтобы обеспечить максимальную совместимость имен файлов в разных операционных системах.
Я использовал эту функцию htmlspecialchars для атрибутов alt в изображениях
$test = "{'employees':[{'firstName':'John', 'lastName':'Doe'},{'firstName':'John', 'lastName':'Doe'}]}" ; $test = str_replace("'", '"', $test); echo $test; $jtest = json_decode($test,true); var_dump($jtest);
$replace_str = array('"', "'", ","); $FileName = str_replace($replace_str, "", $UserInput);
Попробуй это. Вы можете разделить только '
и "
с помощью:
$FileName = str_replace(array('\'', '"'), '', $UserInput);