【问题标题】:URL encoded character replacement with predefined characters使用预定义字符替换 URL 编码字符
【发布时间】:2012-10-05 15:16:20
【问题描述】:

我正在尝试对动态生成或 url 进行万无一失,以免出现难看的 url 编码字符。我使用 MySQL 数据库中的数据生成 url。

例如,我通过用破折号 (-) 替换空格来生成 url 的标题字段。

domain.com/movie/the-terminator/

问题是我无法预料到标题中可能出现的所有角色。这意味着生成的 url 不会与浏览器栏中的实际 url 匹配,因为它会被编码。

是否有任何可用的 php 代码进行此替换?我不想手动进行,因为要编码的字符很多。我还想替换一些其他字符,例如括号“(”和“)”。这可能是一种特殊的 php 方法,可以用定义的值替换 url 编码的字符,如果是这样,请告诉我,因为这可以很容易地解决我的问题,谢谢。

【问题讨论】:

  • 您通常会在添加从数据库派生的任何“slug”的记录时实现此功能。然后它将与其他所有东西一起保存这个蛞蝓。然后你让用户知道如果他们想手动输入什么是可以接受的,或者如果他们不想,让它自动从另一个字段(如标题)派生。

标签: php url url-rewriting urlencode url-encoding


【解决方案1】:

查看此链接。 http://cubiq.org/the-perfect-php-clean-url-generator - “完美的 PHP 清洁 URL 生成器”

示例:

setlocale(LC_ALL, 'en_US.UTF8');
function toAscii($str, $replace=array(), $delimiter='-') {
    if( !empty($replace) ) {
        $str = str_replace((array)$replace, ' ', $str);
    }

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[/_|+ -]+/", $delimiter, $clean);

    return $clean;
}

【讨论】:

  • 正是我所追求的,谢谢!
  • 由于此答案可能会满足 OP 的问题,因此最好在您的答案中包含代码的基本部分,因为该网站可能在某些时候不可用。我已经为你编辑了。
猜你喜欢
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2010-12-28
  • 2010-10-01
相关资源
最近更新 更多