【问题标题】:Clean URL generator Symfony2 working in dev but not in prod干净的 URL 生成器 Symfony2 在 dev 中工作但在 prod 中不工作
【发布时间】:2015-06-29 01:01:09
【问题描述】:

我在 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,我在 http.conf for Apache 和 php.ini 中添加了 UTF-8 作为默认字符集,如果我输入“php app/check.php”,一切都很好,但是它只是建议一个 PHP 加速器。

我尝试上传一个带有特殊字符 /holá.html 的文件,它工作正常。

我不知道还能做什么。是不是prod环境配置的原因?

【问题讨论】:

    标签: php symfony url centos5


    【解决方案1】:

    iconv() 需要正确的setlocale();。确保您没有在环境之间更改它,如果您的开发开发机器与 prod 不同,请检查您是否安装了正确的语言环境。

    【讨论】:

    • 谢谢!这就是解决方案,但我不知道为什么它无法识别我的语言环境。我在 app/autoload.php 中添加了“setlocale(LC_ALL,'es_ES');”,但我将它移到了类 Utility 所在的存档中(我不知道什么更正确)。无论如何,我在 prod 机器上的语言环境是 LANG=es_ES.UTF-8 LC_CTYPE="es_ES.UTF-8" LC_NUMERIC="es_ES.UTF-8" .... LC_ALL= ... 在我的本地机器上是一样的.参数都是一样的......它是固定的,但我不得不添加一行我不应该
    • 为了确保你得到你需要的东西,只需将iconv 调用与setlocale 包装起来。存储当前的第一条setlocale(LC_CTYPE, null);,设置你的,调用iconv,恢复上一条。然后它不会影响系统的其他部分,您的代码将始终有效。
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2018-11-22
    • 2015-02-13
    • 1970-01-01
    • 2023-03-30
    • 2012-06-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多