我想有一个函数从Unicode字符串创建鼻涕虫,例如gen_slug('Andrés Cortez')应该返回andres-cortez。我该怎么做呢?
当前回答
你可以看看Normalizer::normalize(),看这里。它只需要加载PHP的intl模块
其他回答
如果使用Core中已经实现的东西呢?
//Clean non UTF-8 characters
Mage::getHelper('core/string')->cleanString($str)
或者核心url/ url重写方法之一..
下面是制作鼻涕虫的简单方法
function convertURLs($value){
$delimiter = '-';
$slug = strtolower(trim(preg_replace('/[\s-]+/', $delimiter, preg_replace('/[^A-Za-z0-9-]+/', $delimiter, preg_replace('/[&]/', 'and', preg_replace('/[\']/', '', iconv('UTF-8', 'ASCII//TRANSLIT', $value))))), $delimiter));
return $slug;}
如果你的弹头只包含A-Za-z0-9-那么这对你来说是可以的
function sanitize_slug($text)
{
$text = preg_replace('/[^A-Za-z0-9-]+/', '-', $text);
$text = trim($text, '-');
$text = preg_replace('~-+~', '-', $text);
return $text;
}
我正在使用这个函数,它工作得很好:
function slugify($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')), '-'));
}
我认为最优雅的方法是使用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
推荐文章
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 如何在PHP中捕获cURL错误
- 如何将一个标题转换为jQuery的URL段塞?
- 如何要求一个分叉与作曲家?
- 如何在php中创建可选参数?
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?