9

我想将任何标题(例如博客条目)转换为用户友好的 url。我使用rawurlencode()来做到这一点,但它给了我很多奇怪的字符串,比如%s.

该算法应考虑德语字符,如 Ö、Ä 等。我想从标题制作一个 url,并能够通过解码 url 来获取标题。

我尝试了其中的一些代码:http ://pastebin.com/L1SwESBn ,它在其他一些问题中提供,但它似乎是一种方式。

例如HÖRZU.de -> hoerzu-de -> HÖRZU.de

有任何想法吗?

4

4 回答 4

8

您想创建 slug,但根据经验,我可以告诉您解码的可能性是有限的。例如,“Foo - Bar”将变成“foo-bar”,那么你怎么可能知道它一直不是“foo bar”或“foo-bar”?

或者你不想在你的 slug 中使用的字符怎么样,也没有像“`”这样的表示?因此,您可以像使用 1 对 1 转换一样rawurlencode(),也可以创建一个 Slug,这是一个函数的示例——但正如我所说,不可能进行可靠的解码——它的本质是因为你必须丢弃信息。

function sanitizeStringForUrl($string){
    $string = strtolower($string);
    $string = html_entity_decode($string);
    $string = str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),$string);
    $string = preg_replace('#[^\w\säüöß]#',null,$string);
    $string = preg_replace('#[\s]{2,}#',' ',$string);
    $string = str_replace(array(' '),array('-'),$string);
    return $string;
}
于 2010-12-24T08:58:31.287 回答
2
函数 url_title($str, $separator = 'dash', $lowercase = FALSE)
 {
  if ($separator == '破折号')
  {
   $搜索 = '_';
   $replace = '-';
  }
  别的
  {
   $搜索 = '-';
   $replace = '_';
  }

  $trans = 数组(
      '&\#\d+?;' => '',
      '&\S+?;' => '',
      '\s+' => $替换,
      '[^a-z0-9\-\._]' => '',
      $replace.'+' => $replace,
      $replace.'$' => $replace,
      '^'.$replace => $replace,
      '\.+$' => ''
       );

  $str = strip_tags($str);

  foreach ($trans as $key => $val)
  {
   $str = preg_replace("#".$key."#i", $val, $str);
  }

  if ($小写 === TRUE)
  {
   $str = strtolower($str);
  }

  返回修剪(stripslashes($str));
 }
于 2010-12-24T09:23:09.117 回答
1

我认为最优雅的方式是使用 Behat\Transliterator\Transliterator。

我需要通过你的类扩展这个类,因为它是一个抽象,有些像这样:

<?php
use Behat\Transliterator\Transliterator;

class Urlizer extends Transliterator
{
}

然后,只需使用它:

$text = "Master Ápiu";
$urlizer = new Urlizer();
$slug = $urlizer->transliterate($slug, "-");
echo $slug; // master-apiu

当然你也应该把这些东西放在你的作曲家中。

composer require behat/transliterator

更多信息在这里https://github.com/Behat/Transliterator

于 2016-12-14T16:58:52.050 回答
0

没有可靠的方法可以将蛞蝓“解码”回其原始形式。这里最好的解决方案是将 slug 及其原始数据库。

于 2021-09-01T11:11:44.363 回答