从友好的seo url中删除php字符串中的所有标点符号

时间:2014-03-25 17:51:34

标签: php regex url seo

所以,我在这个网站上看到了很多“解决方案”,但它们似乎都不适合我。我想从帖子名称中删除所有标点符号,以便系统可以为每个帖子动态创建网址。我发现David Walsh的一篇文章提供了如何实现这一目标的分步教程。然而,并非所有东西都被剥夺了。以下是该文章的链接(以防万一):http://davidwalsh.name/php-seo

以下是我为删除所有标点符号而修改的代码:

$return = trim(preg_replace('/[^a-z0-9]+/i'," ", strtolower($post_name)));

以下是帖子名称的示例:测试,此&amp;更<!/强>

当我回复网址时的结果:testing-039-s-this-amp-more.php

我不确定为什么它会保留&符号和单引号的html代码。有任何想法吗?!?

2 个答案:

答案 0 :(得分:2)

看起来数据在某处运行htmlspecialchars()htmlentities()。首先使用htmlspecialchars_decode()html_entity_decode()撤消该操作:

$return = trim(preg_replace('/[^a-z0-9]+/i'," ", strtolower(htmlspecialchars_decode($post_name))));

答案 1 :(得分:0)

/**
  * prepares a string optimized for SEO
  * @see https://blog.ueffing.net/post/2016/03/14/string-seo-optimieren-creating-seo-friendly-url/
  * @param String $string 
  * @return String $string SEO optimized String
  */
function seofy ($sString = '')
{
    $sString = preg_replace('/[^\\pL\d_]+/u', '-', $sString);
    $sString = trim($sString, "-");
    $sString = iconv('utf-8', "us-ascii//TRANSLIT", $sString);
    $sString = strtolower($sString);
    $sString = preg_replace('/[^-a-z0-9_]+/', '', $sString);

    return $sString;
}

// Example
seofy("Testing's, this & more!"); // => testing-s-this-more

@see