#php #javascript #serialization
#php #javascript #Сериализация
Вопрос:
Это мой php-файл, в котором я хочу проверять только числовой ввод для моих текстовых полей с идентификаторами = Mobile amp; Home:
$elementids = array("Mobile","Home");
$serialized = rawurlencode(serialize($elementids));
$testvar='validatenumbers.php?elementids='.$serialized ;
<script type="text/javascript" src="only-numbers.php?elementids=<?php echo $serialized ; ?>"></script>
Затем другой файл : validatenumbers.php :
$testvar = unserialize(rawurldecode($_GET['elementids']));
echo "<pre>";
print_r($testvar);
echo "</pre>";
Он ничего не отображает , т. Е. в массиве ‘$testvar’ ничего нет.
—-РЕДАКТИРОВАТЬ—— Когда я проверяю $ _GET, тогда он показывает :
$_GET['elementids'] ---- a:2:{i:0;s:24:"Mobile";i:1;s:20:"Home";}
rawurldecode($_GET['elementids']) ---- a:2:{i:0;s:24:"Mobile";i:1;s:20:"Home";}
unserialize(rawurldecode($_GET['elementids'])) = **empty**
Комментарии:
1. Как validatenumbers.php вызывается? из браузера? через include()? Какова связь между вашим текущим файлом PHP и validatenumbers.php ?
2. @Moe Sweet: да, validatenumbers.php вызывается из другого php-файла , первый код принадлежит этому файлу
Ответ №1:
- вам не нужно urldecode $_GET значения
- в вашем вопросе должен быть HTML-код. Без этого это имеет небольшой смысл.
- http_build_query()
Комментарии:
1. сэр, на самом деле, у меня есть много форм для моего веб-сайта, теперь в каждой форме я должен проверять только числовой ввод, используя javascript, поэтому мне приходится копировать один и тот же код в каждый файл, поэтому, чтобы избавиться от этого, я создаю общий файл, с помощью которого я получу идентификаторы элементов и создам javascript для проверки только числового ввода
2. Почему бы вам просто не ввести дополнительный атрибут типа <тип ввода=»text» validate=»int» … >, затем написать javascript для поиска всех полей ввода с атрибутом «validate», установленным в «int». Тогда вам не нужно использовать PHP для генерации javascript.
Ответ №2:
2 вещи.
1) Если вы хотите поместить данные в URL, вам нужно закодировать их с помощью функции urlencode в php. (http://php.net/manual/en/function.urlencode.php ) в противном случае значения переменных могут содержать символы, которые браузер может обрабатывать по-разному.
2) Также существует ограничение на длину URL. Если ваш массив сериализуется в очень длинную строку, некоторые браузеры могут ее усечь.
Но поскольку ваш образец массива состоит всего из 2 элементов, я думаю, вам следует начать с вызова urlencode для значения и посмотреть, работает ли это.
<script type="text/javascript" src="only-numbers.php?elementids=<?php echo urlencode($serialized) ; ?>"></script>
———-РЕДАКТИРОВАТЬ———-
Оппс, только что заметил, что ты все-таки закодировал. : (
Тогда проблема заключается в urldecode в целевом файле. Поскольку php уже расшифровал его для вас. O Если вы расшифруете его снова, вы можете потерять некоторые символы.
Комментарии:
1. когда я делаю это: unserialize($_GET[‘elementids’]) —-тогда это выдает пустую строку..
2. Вы пробовали просто распечатать значение «$_GET[‘elementids’]» и посмотреть, есть ли там значения?
3. Это может быть случай, когда браузер действует разумно и отфильтровывает некоторые символы.
4. $_GET[‘elementids’] —- a:2:{i:0;s:24:»Mobile»;i:1;s:20:»Home»;}
5. Выглядит корректно…. Но я замечаю, что в значениях есть косые черты. Настроен ли ваш php на автоматическое удаление косых черт. Обычно это также вызывает некоторую проблему. Обычно я бы установил для него значение off so.