在 CakePHP slugs 中删除特殊字符并将带重音符号的元音转换为不带重音符号的元音
Remove special characters and convert vowels with accent marks to vowels without accent marks in CakePHP slugs
我的鼻涕虫需要两个改进:
Removing special characters.
Converting vowels with accent marks to vowels without accent marks.
问题是我的网站正在生成 URLs,其中包含 slug,例如:
https://example.net/Toronto/product/férula-dental-limpieza-con-ul
https://cuponclub.net/Toronto/product/lifting-de-pestañas
URL 中的那些特殊字符,如“é”和“ñ”,由于许多不同的原因,例如当我将 URLs 集成到我使用的 API 时,对我来说往往是个问题甚至在共享链接时...
我正在使用 CakePHP 1.2
。这就是我在代码中实现 slugs 的方式:
class Product extends AppModel{
..........
..........
..........
var $actsAs = array(
'Sluggable' => array(
'label' => array(
'short_name'
),
'length' => 30,
'overwrite' => false
)
);
..........
..........
..........
}
在数据库中,'short_name'
是用于生成 slug 的字段。如果没有 CakePHP,PHP 已经提供了内置函数,例如 str_replace()
和 preg_replace()
,通过使用这些函数和正则表达式,例如 [^A-Za-z0-9\-]
,我可以在用连字符替换所有空格后删除所有特殊字符。但是由于我使用的是CakePHP
,所以我需要使用它的语法。我在阅读 https://github.com/msadouni/cakephp-sluggable-plugin 时发现了有关 label
:
的信息
label : (array | string, optional) set to the field name that contains
the string from where to generate the slug, or a set of field names to
concatenate for generating the slug. DEFAULTS TO: title
我可以将 label
视为字符串并对其应用 str_replace()
和 preg_replace()
等函数吗?
鉴于您正在使用的插件在过去 10 年内没有任何更新,我可以肯定地说,如果您不想 create a behavior from scratch 也就是说,这也不难做到
因此,只需分叉它并进行所需的更改或创建自定义行为。我还建议看看最新的 CakePHP 是如何处理这个问题的,请参阅 INTL 扩展提供的 \Cake\Utility\Text::slug()
. If your PHP installation supports it, then you may want to backport this, ie make use of PHPs transliteration functionality 的源代码。
我的鼻涕虫需要两个改进:
Removing special characters.
Converting vowels with accent marks to vowels without accent marks.
问题是我的网站正在生成 URLs,其中包含 slug,例如:
https://example.net/Toronto/product/férula-dental-limpieza-con-ul
https://cuponclub.net/Toronto/product/lifting-de-pestañas
URL 中的那些特殊字符,如“é”和“ñ”,由于许多不同的原因,例如当我将 URLs 集成到我使用的 API 时,对我来说往往是个问题甚至在共享链接时...
我正在使用 CakePHP 1.2
。这就是我在代码中实现 slugs 的方式:
class Product extends AppModel{
..........
..........
..........
var $actsAs = array(
'Sluggable' => array(
'label' => array(
'short_name'
),
'length' => 30,
'overwrite' => false
)
);
..........
..........
..........
}
在数据库中,'short_name'
是用于生成 slug 的字段。如果没有 CakePHP,PHP 已经提供了内置函数,例如 str_replace()
和 preg_replace()
,通过使用这些函数和正则表达式,例如 [^A-Za-z0-9\-]
,我可以在用连字符替换所有空格后删除所有特殊字符。但是由于我使用的是CakePHP
,所以我需要使用它的语法。我在阅读 https://github.com/msadouni/cakephp-sluggable-plugin 时发现了有关 label
:
label : (array | string, optional) set to the field name that contains the string from where to generate the slug, or a set of field names to concatenate for generating the slug. DEFAULTS TO: title
我可以将 label
视为字符串并对其应用 str_replace()
和 preg_replace()
等函数吗?
鉴于您正在使用的插件在过去 10 年内没有任何更新,我可以肯定地说,如果您不想 create a behavior from scratch 也就是说,这也不难做到
因此,只需分叉它并进行所需的更改或创建自定义行为。我还建议看看最新的 CakePHP 是如何处理这个问题的,请参阅 INTL 扩展提供的 \Cake\Utility\Text::slug()
. If your PHP installation supports it, then you may want to backport this, ie make use of PHPs transliteration functionality 的源代码。