Передача массива в URL с использованием PHP и его использование в javascript

#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:

  1. вам не нужно urldecode $_GET значения
  2. в вашем вопросе должен быть HTML-код. Без этого это имеет небольшой смысл.
  3. 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.