Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Амперсенды в коде ссылки
 
 автор: Sfinks   (02.12.2011 в 01:44)   письмо автору
 
 

тема тут была http://softtime.ru/forum/read.php?id_forum=1&id_theme=83629&page=1
в ней фигурирует следующий код:
<? 
<a href=form.php?'.implode(" & ", $sql2).'&'.'zone='.$zone.'&class='.$class.'&center='.$center.'&sea='.$sea.'&price='.$price.'&page='. ($page + 1) .'>Следующая</a
?>
Дальше разбор полетов и результат: ВСЕ РАБОТАЕТ.

Вопрос в следующем. Как ссылка с "&", а не "&amp;" может работать? Интерпретатор как-то сам заменяет & на &amp; где это необходимо? Как это настроить? Или же это просто наплевали на валидность кода в расчете что браузер сам как-нить разгребет?

  Ответить  
 
 автор: Tamplier   (02.12.2011 в 12:56)   письмо автору
 
   для: Sfinks   (02.12.2011 в 01:44)
 

Вобще то переменные и делятся & а не &amp; что вас не устраивает, технически именно так и должно быть, тут как раз все верно.
Или я не правильно вас понял?

  Ответить  
 
 автор: cheops   (02.12.2011 в 13:18)   письмо автору
 
   для: Sfinks   (02.12.2011 в 01:44)
 

Символ & обычный символ, &amp; - это требование XML и XML-подобных языков вроде XHTML. Более того, если засунуть &amp; в header() - все перестанет работать: PHP понимает &, а &amp; он прямо так и подставит в URL.

  Ответить  
 
 автор: Sfinks   (02.12.2011 в 18:18)   письмо автору
 
   для: cheops   (02.12.2011 в 13:18)
 

Понятно. Прост у меня вап, а там только xml по стандартам и признается. И мне приходится самому везде следить за заменой & на &amp; .Думал есть способ это поручить интерпретатору пхп, типа как он сам в гет запрос дописывает имя идентификатор сессии при включении use_trans_sid

  Ответить  
 
 автор: cheops   (02.12.2011 в 18:31)   письмо автору
 
   для: Sfinks   (02.12.2011 в 18:18)
 

А есть такой способ... для этого достаточно в php.ini назначить директиве arg_separator.output соответствующее значение
arg_separator.output = "&amp;"

Только в самом PHP-коде, при использовании header(), и других функций, следите, чтобы был просто & (а в браузер пойдет &amp; - его, кстати, и в HTML не вредно использовать).

  Ответить  
 
 автор: Sfinks   (02.12.2011 в 19:43)   письмо автору
 
   для: cheops   (02.12.2011 в 18:31)
 

Это включено. Оно влияет только на то, что сам пхп и дописывает, т.е. идентификатор сессии. Тут да, все корректно. Дописывает &amp;sid=...
А вот если написать echo "<a href='file.php?a=1&b=2'>ссыль</a>", то в браузер так и приходит как написано.
Кстати одинарные кавычки, если они используются повсеместно, а не раз одинарные - раз двойные, то тоже автоматически заменяются на двойные.

> &amp; - его, кстати, и в HTML не вредно использовать).
Я тоже так считаю. Я уж и забыл что в html можно использовать не его =)

  Ответить  
 
 автор: cheops   (02.12.2011 в 19:58)   письмо автору
 
   для: Sfinks   (02.12.2011 в 19:43)
 

Можно такой процесс самому организовать, поместив все в буфер при помощи ob_-функций... даже интереснее можно сделать: отличать & от &amp; и не производить повторное преобразование, если уже выводится &amp;

  Ответить  
 
 автор: Sfinks   (02.12.2011 в 20:28)   письмо автору
 
   для: cheops   (02.12.2011 в 19:58)
 

А поподробнее можно? Простейший пример какой-нить? Не пользовался этими функциями никогда.
Собственно проблемы-то нету.... У меня ссылки выводятся функцией
<?
  
function a($url,$text,$class=false){
    return 
"<a".( $class " class=\"$class\"" "" )." href=\"".str_replace("&","&amp;",$url)."\">".$text."</a>";
  }
?>
и все нормально. Просто интересно стало какие еще интересные варианты могут быть.... Простите за тавтологию =)

  Ответить  
 
 автор: cheops   (02.12.2011 в 20:37)   письмо автору
 
   для: Sfinks   (02.12.2011 в 20:28)
 

Смысл в том, что отправляем весь вывод не клиенту, а в буфер, потом получаем буфер и осуществляем в нем преобразования, а потом уже одним куском отправляем клиенту
<?php 
  
// Весь вывод направляем в буфер 
  
ob_start(); 
  
//.........(что там еще)........ 
  // Тут код, который выводит информацию в окно браузера
  //.........(что там еще)........ 
  // Получаем содержимое буфера
  
$buffer ob_get_contents(); 
  
// Очищаем буфер вывода и отключаем буферизацию вывода 
  
ob_end_clean(); 
  
///////////////////////////////////////////////////////////////// 
  // Вот тут осуществляется замену & на &amp; 
  ///////////////////////////////////////////////////////////////// 
  // После замены отправляем данные клиенту
  
echo $buffer
?> 

  Ответить  
 
 автор: Sfinks   (02.12.2011 в 21:02)   письмо автору
 
   для: cheops   (02.12.2011 в 20:37)
 

О, здорово =) Это может быть полезно и в других ситуациях =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования