TWIG:大写使其他字母变小
TWIG: capitalize makes other letters small
我有一个包含此内容的变量"i want HTML"
当我做capitalize
{{ variable|capitalize }}
时,句子是:"I want html"
如何在TWIG中只写big句子的第一个字母,而其他的保持原样!?
您应该 select 句子的第一个单词,并且只将其大写:
{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}
希望对您有所帮助!在此处查看示例:link
您可以使用 php 函数 create a new filter return 您的字符串 ucfirst
。
以下解决方案适用于任何短语,但它只会修复 "HTML" 单词,而不是可能也需要修复的其他首字母缩略词:
{{ variable|capitalize|replace({ 'html': 'HTML' }) }}
ucfirst
可以,但不能正确处理重音。所以我的 ucfirst
过滤器看起来像这样:
/**
* ucfirst with handling of accents.
*
* @param string $value
* @param string $encoding
*
* @return string
*/
public function ucfirst($value, $encoding = 'UTF8')
{
$strlen = mb_strlen($value, $encoding);
$firstChar = mb_substr($value, 0, 1, $encoding);
$then = mb_substr($value, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}
-
$test1 = $this->container->get('app.twig.text.extension')->ucfirst('i want HTML');
$test2 = $this->container->get('app.twig.text.extension')->ucfirst('éllo');
dump($test1, $test2); die();
将输出:
"I want HTML"
"Éllo"
与ucfirst
相同会输出:
"I want HTML"
"éllo"
你可以这样做:
{{ variable[:1]|upper ~ variable[1:] }}
只是为了说明一个好的 Twig 实践解决方案,您可以创建一个自定义实用程序 Twig 扩展,并考虑将多字节字符串 (mb) 用于以重音符号开头的字符串,以便正常工作:
use Twig_SimpleFilter;
class UtilitiesExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new Twig_SimpleFilter('ucfirst',
array($this, 'ucFirst'), array('needs_environment' => true)
),
);
}
public function ucFirst(Twig_Environment $env, $string)
{
if (null !== $charset = $env->getCharset()) {
$prefix = mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset);
$suffix = mb_substr($string, 1, mb_strlen($string, $charset));
return sprintf('%s%s', $prefix, $suffix);
}
return ucfirst(strtolower($string));
}
}
然后你可以从一个树枝文件中调用这样的过滤器。口音甚至有效:
{{ 'étudiant de PHP' | ucfirst }}
结果:“Étudiant de PHP”
您可以非常轻松地为 ucfirst()
创建过滤器:
//in PHP - during setup
$twig->addFilter(new \Twig_SimpleFilter('ucfirst', 'ucfirst'));
//in Twig usage
{% set variable = 'i want html' %}
{{ variable|ucfirst }} //output: "I want html"
如果您打算在 "HTML"
上使用 strtoupper()
,您可以创建一个过滤器
Twig_SimpleFilter
已弃用。我已经创建了一个使用当前 Twig_Filter
并处理重音(取自 COil 代码)的工作解决方案。该示例演示了独立应用程序中的 Twig 自定义过滤器。
<?php
require __DIR__ . '/vendor/autoload.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
$loader = new FilesystemLoader(__DIR__ . '/templates');
$twig = new Environment($loader);
$twig->addFilter(new Twig_Filter('accFirst', 'accFirst'));
$sentence = 'šumivé víno';
echo $twig->render('customfilter.html.twig',
['sentence' => $sentence]);
function accFirst($value, $encoding = 'UTF8')
{
$strlen = mb_strlen($value, $encoding);
$firstChar = mb_substr($value, 0, 1, $encoding);
$rest = mb_substr($value, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $rest;
}
以下是模板文件。模板文件位于 templates
目录中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom filter</title>
</head>
<body>
<p>
{{ sentence | accFirst }}
</p>
</body>
</html>
使用本机代码的简单解决方案是:
{{ variable|first|capitalize ~ variable|slice(1) }}
我有一个包含此内容的变量"i want HTML"
当我做capitalize
{{ variable|capitalize }}
时,句子是:"I want html"
如何在TWIG中只写big句子的第一个字母,而其他的保持原样!?
您应该 select 句子的第一个单词,并且只将其大写:
{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}
希望对您有所帮助!在此处查看示例:link
您可以使用 php 函数 create a new filter return 您的字符串 ucfirst
。
以下解决方案适用于任何短语,但它只会修复 "HTML" 单词,而不是可能也需要修复的其他首字母缩略词:
{{ variable|capitalize|replace({ 'html': 'HTML' }) }}
ucfirst
可以,但不能正确处理重音。所以我的 ucfirst
过滤器看起来像这样:
/**
* ucfirst with handling of accents.
*
* @param string $value
* @param string $encoding
*
* @return string
*/
public function ucfirst($value, $encoding = 'UTF8')
{
$strlen = mb_strlen($value, $encoding);
$firstChar = mb_substr($value, 0, 1, $encoding);
$then = mb_substr($value, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}
-
$test1 = $this->container->get('app.twig.text.extension')->ucfirst('i want HTML');
$test2 = $this->container->get('app.twig.text.extension')->ucfirst('éllo');
dump($test1, $test2); die();
将输出:
"I want HTML"
"Éllo"
与ucfirst
相同会输出:
"I want HTML"
"éllo"
你可以这样做:
{{ variable[:1]|upper ~ variable[1:] }}
只是为了说明一个好的 Twig 实践解决方案,您可以创建一个自定义实用程序 Twig 扩展,并考虑将多字节字符串 (mb) 用于以重音符号开头的字符串,以便正常工作:
use Twig_SimpleFilter;
class UtilitiesExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new Twig_SimpleFilter('ucfirst',
array($this, 'ucFirst'), array('needs_environment' => true)
),
);
}
public function ucFirst(Twig_Environment $env, $string)
{
if (null !== $charset = $env->getCharset()) {
$prefix = mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset);
$suffix = mb_substr($string, 1, mb_strlen($string, $charset));
return sprintf('%s%s', $prefix, $suffix);
}
return ucfirst(strtolower($string));
}
}
然后你可以从一个树枝文件中调用这样的过滤器。口音甚至有效:
{{ 'étudiant de PHP' | ucfirst }}
结果:“Étudiant de PHP”
您可以非常轻松地为 ucfirst()
创建过滤器:
//in PHP - during setup
$twig->addFilter(new \Twig_SimpleFilter('ucfirst', 'ucfirst'));
//in Twig usage
{% set variable = 'i want html' %}
{{ variable|ucfirst }} //output: "I want html"
如果您打算在 "HTML"
上使用strtoupper()
,您可以创建一个过滤器
Twig_SimpleFilter
已弃用。我已经创建了一个使用当前 Twig_Filter
并处理重音(取自 COil 代码)的工作解决方案。该示例演示了独立应用程序中的 Twig 自定义过滤器。
<?php
require __DIR__ . '/vendor/autoload.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
$loader = new FilesystemLoader(__DIR__ . '/templates');
$twig = new Environment($loader);
$twig->addFilter(new Twig_Filter('accFirst', 'accFirst'));
$sentence = 'šumivé víno';
echo $twig->render('customfilter.html.twig',
['sentence' => $sentence]);
function accFirst($value, $encoding = 'UTF8')
{
$strlen = mb_strlen($value, $encoding);
$firstChar = mb_substr($value, 0, 1, $encoding);
$rest = mb_substr($value, 1, $strlen - 1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $rest;
}
以下是模板文件。模板文件位于 templates
目录中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom filter</title>
</head>
<body>
<p>
{{ sentence | accFirst }}
</p>
</body>
</html>
使用本机代码的简单解决方案是:
{{ variable|first|capitalize ~ variable|slice(1) }}