我想将任何标题(例如博客条目)转换为用户友好的 url。我使用rawurlencode()来做到这一点,但它给了我很多奇怪的字符串,比如%s
.
该算法应考虑德语字符,如 Ö、Ä 等。我想从标题制作一个 url,并能够通过解码 url 来获取标题。
我尝试了其中的一些代码:http ://pastebin.com/L1SwESBn ,它在其他一些问题中提供,但它似乎是一种方式。
例如HÖRZU.de -> hoerzu-de -> HÖRZU.de
有任何想法吗?
我想将任何标题(例如博客条目)转换为用户友好的 url。我使用rawurlencode()来做到这一点,但它给了我很多奇怪的字符串,比如%s
.
该算法应考虑德语字符,如 Ö、Ä 等。我想从标题制作一个 url,并能够通过解码 url 来获取标题。
我尝试了其中的一些代码:http ://pastebin.com/L1SwESBn ,它在其他一些问题中提供,但它似乎是一种方式。
例如HÖRZU.de -> hoerzu-de -> HÖRZU.de
有任何想法吗?
您想创建 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;
}
函数 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)); }
我认为最优雅的方式是使用 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
没有可靠的方法可以将蛞蝓“解码”回其原始形式。这里最好的解决方案是将 slug 及其原始数据库。