Intereting Posts
PDO не выбрасывает исключение из неправильного SQL-запроса PHP session_regenerate_id и браузер Blackberry Получить расширение изображения Оберните латинские символы с помощью тега span MySQL – Как уменьшить значение int каждые 24 часа? Почему разные строки частного ключа в Linux или Windows? Zend 1.12: добавьте javascript в нижней части окна У меня есть форма, в которой, если пользователь вводит ввод, он должен проверять наличие отрицательного или пустого поля ввода и выдавать предупреждающее сообщение Как AUTOINCREMENT, начиная с определенного количества / смещения? Как заставить PHP-версию для командной строки? Создайте zip-файл и загрузите его Как хранить последовательные данные в mysql Как управлять разрешениями файлов, когда плагин php netbeans загружает файл с FTP Какова цель PHP, имеющего символ (знак доллара) перед каждой переменной? Symfony: InvalidArgumentException при анализе web.xml

точка в имени переменной

Я передаю переменную с точкой в ​​строке запроса. Ppp заменяет точку с помощью оценки. Итак, как я могу сохранить имя переменной, которое имеет точку в названии

HTTP: //localhost/sample.php one.txt = на & two.txt = на

sample.php

$ ret = $ _ REQUEST ['one.txt']; // Не работает

Причина, по которой PHP преобразует ваше имя переменной из one.txt в one_txt состоит в том, что точки недействительны в именах переменных.

Для получения дополнительной информации см. Документацию по PHP :

Имена переменных следуют тем же правилам, что и другие метки в PHP. Правильное имя переменной начинается с буквы или подчеркивания, за которой следует любое количество букв, цифр или символов подчеркивания. В качестве регулярного выражения оно выражается следующим образом: «[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] * '

Вы можете либо учесть изменение ( . $_REQUEST['one_txt'] _ ), либо проверить $_REQUEST['one_txt'] иначе вы можете превратить вашу HTML-форму вместо допустимого имени переменной.

Редактировать:

Чтобы прокомментировать комментарий Майкла Боргвардта, вот текст из документации PHP по обработке переменных из внешних источников :

Точки в именах входящих переменных

Как правило, PHP не изменяет имена переменных, когда они передаются в скрипт. Однако следует отметить, что точка (период, полная остановка) не является допустимым символом в имени переменной PHP. По этой причине, посмотрите на это:

 <?php $varname.ext; /* invalid variable name */ ?> 

Теперь, что видит синтаксический анализатор, это переменная с именем $ varname, за которой следует оператор конкатенации строк, за которым следует barestring (т.е. некорректная строка, которая не соответствует ни одному известному ключу или зарезервированным словам) 'ext'. Очевидно, это не имеет предполагаемого результата.

По этой причине важно отметить, что PHP автоматически заменяет любые точки в именах входящих переменных символами подчеркивания.

Это действительно особенность PHP.

Используйте $ _SERVER ['QUERY_STRING']

 $get = array(); foreach(explode('&', $_SERVER['QUERY_STRING']) as $part) { $part = explode('=', $part); if($key = array_shift($part)) { $get[ $key ] = implode('', $part); } } print_r($get); 

Результат для вашего примера Массив ([one.txt] => on [two.txt] => on)

Разработчики PHP внедрили это для поддержки register_globals (), но если бы они остановились более чем на одну секунду, чтобы рассмотреть последствия, они бы только изменили имена, импортированные в пространство имен глобальных переменных, а не в $ _POST. Существует меньше причин для изменения самих переменных запроса … ну, кроме того, что PHP не способен обрабатывать стандартные формы.

Вот решение для переменных POST, которое, вероятно, сложнее для большего числа пользователей, чем решение GET:

 function post_data(){ $data=explode('&',file_get_contents("php://input")); $post=array(); foreach ($data as $var){ list($key,$value)=explode('=',$var,2); $post[$key]=urldecode($value); } return $post; }