Лучший способ конвертировать заголовок в URL-совместимый режим в PHP? - PullRequest
12 голосов
/ 10 февраля 2010
http://domain.name/1-As Low As 10% Downpayment, Free Golf Membership!!!

Указанный выше URL будет сообщать 400 bad request,

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

Ответы [ 6 ]

22 голосов
/ 01 августа 2010

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

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

as-low-as-10-downpayment-free-gold-membership

Примерно так:

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;
}

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

8 голосов
/ 10 февраля 2010

Смотрите первый ответ здесь URL Friendly Username в 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
1 голос
/ 10 февраля 2010

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

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

0 голосов
/ 21 июля 2017

Для упрощения просто полный список переменных $change_to и $to_change

<?php

// Just full the array list to make replacement complete
// In this space will change to _, à to just a



$to_change = [
    ' ', 'à', 'à', 'â','é', 'è', 'ê', 'ç', 'ù', 'ô', 'ö' // and so on
];

$change_to = [
    '_', 'a', 'a', 'a', 'e', 'e', 'e','c', 'u', 'o', 'o' // and so on
];

$texts = 'This is my slug in êlàb élaboré par';

$page_id = str_replace($to_change, $change_to, $texts);
0 голосов
/ 24 апреля 2014

Я просто создаю суть с полезной функцией слаг:

https://gist.github.com/ninjagab/11244087

Вы можете использовать его для преобразования названия в SEO дружественный URL.

<?php
class SanitizeUrl {

    public static function slug($string, $space="-") {
        $string = utf8_encode($string);
        if (function_exists('iconv')) {
            $string = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
        }

        $string = preg_replace("/[^a-zA-Z0-9 \-]/", "", $string);
        $string = trim(preg_replace("/\\s+/", " ", $string));
        $string = strtolower($string);
        $string = str_replace(" ", $space, $string);

        return $string;
    }
}

$title = 'Thi is a test string with some "strange" chars ò à ù...';
echo SanitizeUrl::slug($title);
//this will output:
//thi-is-a-test-string-with-some-strange-chars-o-a-u
0 голосов
/ 10 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...