SEO URL 上的 PHP preg_replace 未给出预期结果

标签 php url seo preg-replace character

所以,我有这个方法:

$seo_special = array("ä", "õ", "ö", "ü", "Ä", "Õ", "Ö", "Ü");
$seo_special_replace = array("a", "o", "o", "u", "a", "o", "o", "u");
$seo_tag_a2b = str_replace($seo_special, $seo_special_replace, $row->name);
$seo_tag_a2b = preg_replace('/[^a-z0-9-]/i', '', strtolower(str_replace(' ', '-', trim($seo_tag_a2b))));

我希望它将特殊字符替换为普通字符,但不知何故,它会跳过这些字符,Põrandalaud/Liistparkett 的结果是 prandalaud--liistparkett 当它应该是 porandalaud--liistparkett 我不知道我做错了什么。任何帮助,将不胜感激。

最佳答案

您可以使用 iconv将奇怪的字符转换为仅 ASCII 字符。

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;
}

测试:

echo toAscii("Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\ url fun.ction!?-->");
returns: messd-up-text-just-to-stress-test-our-little-clean-url-function

echo toAscii("Perché l'erba è verde?", "'"); // Italian
returns: perche-l-erba-e-verde

echo toAscii("Peux-tu m'aider s'il te plaît?", "'"); // French
returns: peux-tu-m-aider-s-il-te-plait

echo toAscii("Tänk efter nu – förr'n vi föser dig bort"); // Swedish
returns: tank-efter-nu-forrn-vi-foser-dig-bort

echo toAscii("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ");
returns: aaaaaaaeceeeeiiiidnooooouuuuyssaaaaaaaeceeeeiiiidnooooouuuuyy

echo toAscii("Custom`delimiter*example", array('*', '`'));
returns: custom-delimiter-example

echo toAscii("My+Last_Crazy|delimiter/example", '', ' ');
returns: my last crazy delimiter example

方法和学分The perfect PHP clean url generator

为了帮助您进行谷歌搜索,您可以搜索“url slug php”。

关于SEO URL 上的 PHP preg_replace 未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528835/

相关文章:

javascript - 我可以在本地发出 ajax 请求,然后将响应发送到互联网吗?

php - 确定网站的 'root' 位置

jquery - 将 Solr 暴露给搜索引擎爬虫 (SEO) 的策略

用于动态 HTML 页面的 PHP 与 JavaScript

php - 谷歌搜索中的 seo 元描述问题

javascript - 在 Laravel 中的 jQuery 中提交表单后加载 GIF

php - 连接三个表

php - 当我在 .php url 后面加上斜杠 (/) 时会发生什么?

javascript - Backbone.js 和 Backbone 实现的最佳 URL 结构

Url Slug 应该本地化吗?