dqqt31923 2013-03-27 11:41
浏览 43

Symfony 2 / Doctrine用户定义的DQL函数参数是否有字符串长度限制?

I created my custom DQL function for Doctrine DQL:

class Translate extends FunctionNode {
    public $field;

    public function getSql(SqlWalker $sqlWalker) {
        $query = "TRANSLATE(" . $this->field->dispatch($sqlWalker) . ", 'àâäãáåÀÁÂÃÄÅçÇéèêëÉÈÊËîïìíÌÍÎÏñÑôöðòóÒÓÔÕÖùúûüÙÚÛÜýÿÝ', 'AAAAAAAAAAAACCEEEEEEEEIIIIIIIINNOOOOOOOOOOUUUUUUUUYYY')";
        return $query;
    }

    public function parse(Parser $parser) {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->field = $parser->StringPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }
}

It seems to work well when using it.

But if the string parameter contains more than 307 chars, it is not working. There is no error but the script is ending.

$query = $this->createQueryBuilder('...');
$query->addSelect("TRANSLATE('less than 307 chars')"); // working
$query->addSelect("TRANSLATE('more than 307 chars')"); // NOT working

How can I use more than 307 chars?

  • 写回答

1条回答 默认 最新

  • douzhuoxia0587 2014-10-24 14:34
    关注

    Like wrikken had already explained, Transliteration should be done using iconv since that will save your server resources.

    here's a simple function that will transliterate (convert non latin characters to their closest representations in latin charset) a string.

    function transliterateString($str)
    {
        $serverLocale = setlocale(LC_CTYPE, 0);
        setlocale(LC_CTYPE, 'en_US.UTF8');
        // transliterate the string using iconv
        $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); 
        setlocale(LC_CTYPE, $serverLocale); //  return the locale to what it was before
        return $str;
    }   
    

    Usage:

    $string = "café"; 
    echo $string;
    echo transliterateString($string);
    

    Above will output the below:

    café
    cafe
    
    评论

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行