Как начинающий php ученик, я использую Code-Canyon Премиум URL Shortner Сценарий и сделано 2 дня исследований. К сожалению, я не могу решить мою проблему.
Сценарий сокращения URL-адреса urlencoding URL-адреса API, который он отправляет в сценарий, при этом он заменяет &
символы с &
в результате чего URL-адрес не работает правильно на конечной странице назначения.
Я пытался использовать preg_replace
, str_replace
а также пытался использовать urldecode
на странице назначения, но ни один из них, кажется, не работает. Вот мой текущий сценарий:
$makeshort = "http://mywebsite.com/email/quote.php?quoteid=$visitor&customertype=fhbs";
$mkshrt = str_replace("/&/","%26",$makeshort);
$short = "http://shorturl.com/api?&api=REMOVED&format=text&url=".urlencode($mkshrt);
// Using Plain Text Response
$api_url = $short;
$res= @file_get_contents($api_url);
if($res)
$shorturl = $res;
$shorty = json_decode($shorturl);
$shorturl = $shorty->{'short'};
echo $shorturl;
Примечание: где вы видите
&format=text
в API-адресе я пытался использовать его с и без&format=text
однако это не имеет значения, что так всегда.
Я надеюсь, что мог бы быть простой и быстрый способ решить эту проблему, так как я передаю только две переменные, а вторая переменная отображается так:
mywebsite.com/email/quote.php?quoteid=01234567890&customertype=fhbs
Таким образом, переменная customertype испорчена из-за amp;
условное обозначение.
Я искренне надеюсь, что кто-то со знанием дела мог бы посоветовать мне лучший подход или даже простой способ решить эту проблему, поскольку я действительно нахожусь в моем конце! Мои знания недостаточно хороши, чтобы исследовать точные ключевые фразы, чтобы указывать правильное направление.
Спасибо, что уделили мне время на прочтение этого, и я надеюсь, что кто-то будет любезен помочь мне здесь
Я знаю это чувство, потому что я сам только начинаю понимать кодирование и разработку.
Я лично решил бы это одним из двух способов. Если вы уже пытались использовать htmlspecialchars или htmlentities вместе с urldecode, то самый простой и быстрый способ добиться этого — прочитать строку URL, а затем заменить строку &
символ с &
используя str_replace и выполняйте либо мета-обновление страницы, либо `перенаправление расположения заголовка
Вот что я имею в виду в качестве краткого примера, однако следует подчеркнуть, что может потребоваться дополнительная безопасность, и это ТОЛЬКО быстрое исправление, а не надежное стабильное и постоянное исправление, хотя с этим можно поиграть и, возможно, что-то сработать для ваших собственных обстоятельств.
$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(strstr($url, "&")){
$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$url = str_replace('&', '&', $url);
echo "<meta http-equiv='refresh' content='0;URL=$url'>";
exit;
}
Альтернативный способ с расположением заголовка:
$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(strstr($url, "&")){
$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$url = str_replace('&', '&', $url);
header("Location: $url");
exit();
}
Это полностью удалит любые &
символы из URL и замените их на &
,
Вы также можете поиграть с этим, чтобы удалить еще больше из строки URL и заменить такие вещи, как /
или запрещенные слова.
Пример вывода будет выглядеть так:
Оригинальный URL, вызывающий проблемы:
http://mywebsite.com/email/quote.php?quoteid=1234567890&
CustomerType = fhbs
Новый URL после того, как скрипт выполнил и обновил страницу:
http://mywebsite.com/email/quote.php?quoteid=1234567890&CustomerType = fhbs
Как видно из приведенного выше текста с гиперссылкой, амперсанд разрывает строку, и все, что после этого читается неправильно, но когда этот скрипт выполняется и обновляет страницу, URL будет похож на вторую гиперссылку, таким образом, заставляя работать URL для того, что вам нужно ,
ПРИМЕЧАНИЕ: ЭТО НЕ БЕЗОПАСНЫЙ СПОСОБ ДЕЙСТВИЯ И НЕ МОЖЕТ БЫТЬ ИДЕАЛЬНЫМ ДЛЯ ВАШИХ ОБСТОЯТЕЛЬСТВ, ЭТО ПРОСТО ИДЕЯ И НАДЕЖДА ЭТО ПОМОГАЕТ!
Благодарю.
Других решений пока нет …