【问题标题】:Remove all punctuation from php string for friendly seo url从 php 字符串中删除所有标点符号以获得友好的 seo url
【发布时间】:2014-05-03 18:20:34
【问题描述】:

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

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

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

这是一个示例帖子名称:Testing's, this & more!

回显 url 时的结果:testing-039-s-this-amp-more.php

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

【问题讨论】:

  • 如何查找:'/\pP+/u',替换''
  • 是的,看起来实体正在被翻译。但是为什么是039?在你 preg 之前尝试在 $post_name 上进行调试打印。

标签: php regex url seo


【解决方案1】:

看起来数据在某处通过htmlspecialchars()htmlentities() 运行。先用htmlspecialchars_decode()html_entity_decode() 撤消它:

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

【讨论】:

  • 如此接近!!!!回显时的 url 现在看起来像这样:testing-039-s-this-more.php。它似乎只删除了 url 的 amp。 :(
  • 所以我正在查看我的代码,发现帖子名称被 htmlentities() 包围:$post_name = htmlentities(($_POST['post_name']), ENT_QUOTES, 'utf-8');
  • 做到了!还有一个问题......出于某种原因,它在 g 和 s 之间添加了一个空格。有没有办法解决这个问题?它似乎没有发生在网址中的其他任何地方。这是修复代码后的更新网址:testing-s-this-more.php
  • 没关系!我插入了文章中使用的代码:$return = trim(ereg_replace(' +', ' ', preg_replace('/[^a-zA-Z0-9\s]/', '', strtolower($post_name))));,它现在完美运行!感谢您的所有帮助:D
【解决方案2】:
/**
  * 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2010-10-02
    相关资源
    最近更新 更多