Имя поля формы поля «Моя HTML» выглядит примерно так:
name = "Some File name.pdf"
Массив PHP POST выглядит примерно так (некоторые символы заменены на подчеркивание):
array( "Some_File_name_pdf" => "on" )
Есть ли функция PHP, которую я могу использовать для преобразования строки имени файла точно так, как она появляется в массиве POST? Меня не интересует str_replace. Я хочу иметь возможность сделать это:
$myfilename = $obj->getFileName(); // returns "Some File name.pdf" $result = isset($_POST[some_encoding_function($myfilename)]);
Some_encoding_function должен взять строку типа «Some File name.pdf» и вернуть что-то вроде «Some_File_name_pdf»;
Согласно документации PHP :
Точки и пробелы в именах переменных преобразуются в символы подчеркивания.
Это потребует только тривиальной замены строки.
Однако, согласно комментарию на этой странице :
Полный список символов имени поля, которые PHP преобразует в _ (подчеркивание), следующий (а не только точка):
chr (32) () (пробел)
chr (46) (.) (точка)
chr (91) ([) (открытая квадратная скобка)
chr (128) – chr (159) (различные)
Если этот комментарий правильный, то вам должно быть хорошо идти с такой функцией, как
function underscorify($s) { return preg_replace('/[ \.\[\x80-\x9F]/', '_', $s); }
Обратите внимание, однако, что chr(128) - chr(159)
неоднозначно, поскольку не упоминается, зависит ли это от кодирования символов или нет.
Он может относиться ко всем символам ASCII от €
до Ÿ
, он может относиться ко всем управляющим символам UTF-8 с \u0080
– \u009F
или может быть просто жестко запрограммирован на байтовое значение для b >= 128 && b <= 159
,