php - 在 PHP 中将标题转换为 url 兼容模式的最佳方法?

标签 php url

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

上面的url会报400 bad request,

如何将此类标题转换为用户友好的请求?

最佳答案

您可能想使用“slug”来代替。您不使用逐字标题作为 URL,而是 strtolower()并将所有非字母数字字符替换为连字符,然后删除重复的连字符。如果您想要额外的积分,您可以删除 stopwords ,也是。

所以“1-首付低至 10%,免费高尔夫成员(member)!!!”变成:

低至 10 首付免金成员(member)

类似这样的事情:

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

您可能可以使用更长的正则表达式来缩短它,但它的原样非常简单。好处是,在数据库上运行查询以匹配标题之前,您可以使用相同的函数来验证查询参数,这样别人就无法将愚蠢的东西插入您的数据库中。

关于php - 在 PHP 中将标题转换为 url 兼容模式的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234169/

相关文章:

ios - NSURL 对象值为空

url - 友好的网址方案?

javascript - 正则表达式:从 URL 获取内容

php - Laravel 路由 : page you are looking for could not be found

PHP使用通配符搜索数组?

php - 为什么准备好的语句中的计算 'like' 子句需要括号?

PHP 搜索功能不返回图像

php - sendgrid php 示例 - 如何添加发件人姓名?

Python 字符串模式

java - 具有多个参数的 RESTful Spring 服务