Я представляю s
переменная в page.php из формы ввода на другой странице.
URL содержит полную строку с амперсандом. Когда я пытаюсь отобразить переменную, строка обрезается после амперсанда.
форма:
<form action="page.php" method="get">
<input type="text" name="s" id ="s" />
</form>
Переменная это:
search & search
URL:
page.php?s=search+%26+search&var2=variable
переменные отражаются как:
search
Я пытался:
echo htmlspecialchars($_GET['s']);
echo htmlentities($_GET['s']);
echo urldecode($_GET['s']);
Вы можете использовать (как минимум) 3 разных способа архивирования:
1 — urlencode()
: используйте эту функцию там, где вы должны сгенерировать URL для кодирования строки для формата URL.
2 — использовать %26
(без «+»);
3 — Использование $_SERVER['QUERY_STRING']
Если у вас есть только один параметр, вы можете получить все строки запроса таким образом.
ОБНОВИТЬ:
то есть:
$url = "page.php?s=".urlencode('search & search')."&var2=".urlencode('variable'); //or urlencode($variable)
Затем используйте: urldecode () для анализа различий $ _GET.
Я полагаю, у вас есть код, похожий на этот,
<a href="http://localhost/example/page.php?s=search+%26+search">
Такого рода, приведут только search
после того, как вы попытаетесь повторить это.
Попробуйте так,
<a href="http://localhost/example/page.php?s=<?php echo urlencode("search+%26+search") ?>">
Это удобный способ кодирования части запроса в URL.
а также попробуйте этот пример из официальной документации php
<?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
и для получения дополнительной информации, пожалуйста, обратитесь к этому.
http://php.net/manual/en/function.urlencode.php
Я только что попробовал то, что вы сказали, и проблема не в кодировке URL.
Попробуйте это https://www.google.co.in/?q=search+%26+search , Google ищет search & search
может быть проблема на page.php
где вы пытаетесь повторить переменную.
Кроме того, чтобы доказать, что Google не делает ничего особенного, я просто создал два файла с именами index.php и page.php, и результат оказался ожидаемым.
index.php
<html>
<body>
<form action="1.php" method="get">
<input type="text" name="s" id="s">
</form>
</body>
</html>
page.php
<?php
echo $_GET['s'];
?>
выход:
search & search
Попробуйте отладить свой код на page.php, где вы пытаетесь отобразить переменную, или вставьте сюда весь код.
Попробуйте это, хотя я проверяю это локально, вот код
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Problem</title>
</head>
<body>
<form action="page.php" method="get">
<input type="text" name="s" id ="s" />
<input type="text" name="var2" id ="d" />
<input type="submit" name="name" value="submit">
</form>
</body>
</html>
и page.php
<?php
if (isset($_GET['s'])) {
echo $_GET['s'] .' '. $_GET['var2'];
}
?>
когда вы запустите его в своем браузере, он отобразит две формы ввода и кнопку отправки.
Выход будет
search & search variable
Я пытаюсь также вставить в URL
page.php?s=search+%26+search&var2=variable&name=submit
Я результат тот же
Надеюсь это поможет