清理 URL 生成器 Symfony2 在开发中工作但不在生产中
Clean URL generator Symfony2 working in dev but not in prod
我在 Symfony 2.6 中使用此代码作为干净的 URL 生成器:
namespace AppBundle\Utility;
class Utility {
public static function getSlug($string, $separator = '-')
{
// Source: http://cubiq.org/the-perfect-php-clean-url-generator
$slug = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
$slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
$slug = strtolower(trim($slug, $separator));
$slug = preg_replace("/[\/_|+ -]+/", $separator, $slug);
return $slug;
}
}
它在我的开发环境中运行良好,带有特殊字符,但在我的生产环境(我的服务器)中却不行。它不会改变像 á é ñ % 这样的字符,它们只是消失了。例子"Artículo año 2000",显示:"artculo-ao-2000".
我已经在 CentOS 5.11 中安装了 PHP 5.5.23,如果我输入 "php app/check.php" 一切都很好,但它只建议使用 PHP 加速器。
我尝试上传一个带有特殊字符 /holá.html 的文件,但效果很好。
我不知道还能做什么。是不是prod环境配置的问题?
iconv()
需要正确的 setlocale();
。确保你没有在环境之间改变它,如果你的开发机器不同于生产机器,检查你是否安装了正确的语言环境。
我在 Symfony 2.6 中使用此代码作为干净的 URL 生成器:
namespace AppBundle\Utility;
class Utility {
public static function getSlug($string, $separator = '-')
{
// Source: http://cubiq.org/the-perfect-php-clean-url-generator
$slug = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
$slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
$slug = strtolower(trim($slug, $separator));
$slug = preg_replace("/[\/_|+ -]+/", $separator, $slug);
return $slug;
}
}
它在我的开发环境中运行良好,带有特殊字符,但在我的生产环境(我的服务器)中却不行。它不会改变像 á é ñ % 这样的字符,它们只是消失了。例子"Artículo año 2000",显示:"artculo-ao-2000".
我已经在 CentOS 5.11 中安装了 PHP 5.5.23,如果我输入 "php app/check.php" 一切都很好,但它只建议使用 PHP 加速器。
我尝试上传一个带有特殊字符 /holá.html 的文件,但效果很好。
我不知道还能做什么。是不是prod环境配置的问题?
iconv()
需要正确的 setlocale();
。确保你没有在环境之间改变它,如果你的开发机器不同于生产机器,检查你是否安装了正确的语言环境。