所以,我在这个网站上看到了很多“解决方案”,但它们似乎都不适合我。我想从帖子名称中删除所有标点符号,以便系统可以为每个帖子动态创建网址。我发现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代码。有任何想法吗?!?
答案 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