Лучший способ преобразовать заголовок в URL совместимый режим в PHP?

http://domain.name/1-As Low As 10% Downpayment, Free Golf Membership!!!

Вышеупомянутый URL сообщит 400 bad request,

как преобразовать такой заголовок в удобный для пользователя хороший запрос?

12
задан user198729 10 February 2010 в 03:11
поделиться

4 ответа

Вы можете использовать urlencode или rawurlencode ... например, Википедия сделайте это. См. эту ссылку: http://en.wikipedia.org/wiki/Ichigo_100%25

это кодировка php для% =% 25

1
ответ дан 2 December 2019 в 05:03
поделиться

См. Первый ответ здесь URL-адрес удобного имени пользователя в PHP? :

function Slug($string)
{
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}

$user = 'Alix Axel';
echo Slug($user); // alix-axel

$user = 'Álix Ãxel';
echo Slug($user); // alix-axel

$user = 'Álix----_Ãxel!?!?';
echo Slug($user); // alix-axel
8
ответ дан 2 December 2019 в 05:03
поделиться

Вы можете использовать rawurlencode() функцию

0
ответ дан 2 December 2019 в 05:03
поделиться

Вместо этого вы можете использовать «пулю». Вместо того, чтобы использовать дословный заголовок в качестве URL-адреса, вы strtolower () замените все не буквенно-цифровые символы дефисами, а затем удалите повторяющиеся дефисы. Если вы хотите получить дополнительную оценку, вы можете также исключить стоп-слов .

Итак, «от 1 до 10% первоначального взноса, бесплатное членство в гольф-клубе !!!» становится:

as-low-as-10-uppayment-free-gold-members

Что-то вроде этого:

function sluggify($url)
{
    # Prep string with some basic normalization
    $url = strtolower($url);
    $url = strip_tags($url);
    $url = stripslashes($url);
    $url = html_entity_decode($url);

    # Remove quotes (can't, etc.)
    $url = str_replace('\'', '', $url);

    # Replace non-alpha numeric with hyphens
    $match = '/[^a-z0-9]+/';
    $replace = '-';
    $url = preg_replace($match, $replace, $url);

    $url = trim($url, '-');

    return $url;
}

Вы, вероятно, могли бы сократить его с помощью более длинных регулярных выражений, но это довольно просто как есть. Бонус в том, что вы можете использовать ту же функцию для проверки параметра запроса, прежде чем запускать запрос в базе данных на соответствие заголовку, чтобы кто-то не мог вставлять глупые вещи в вашу базу данных.

22
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: