[TYPO3-core] RFC #11698: t3lib_div::strtoupper does not convert all characters

Christopher Stelmaszyk christopher at yahoo.de
Wed Aug 26 13:24:46 CEST 2009


Hi!

This is a SVN patch request.

Type: feature

Branches: trunk

BT reference:
http://bugs.typo3.org/view.php?id=11698

Problem:
t3lib_div::strtoupper is used at several places in the core to convert 
strings to uppercase.

The problem is that this function only converts the latin characters a-z. It 
does not take other letters into account. E.g. accents or german umlauts 
will not be converted.

If applied on a string with accents or umlauts the result looks really odd.

Solution:
This solution is provided by Michael Stucki.
1. Fix the bug (convert umlauts etc. too).
2. Depreciate the functions strtoupper() and strtolower() and tell the users 
to use t3lib_cs::conv_case() instead (this was already part of the 
php-comment).

Kind regards

Christopher



Index: t3lib/class.t3lib_div.php
===================================================================
--- t3lib/class.t3lib_div.php	(Revision 5779)
+++ t3lib/class.t3lib_div.php	(Arbeitskopie)
@@ -1511,15 +1511,30 @@

 	/**
 	 * Converts string to uppercase
-	 * The function converts all Latin characters (a-z, but no accents, etc) 
to
-	 * uppercase. It is safe for all supported character sets (incl. utf-8).
+	 * The function converts all characters to uppercase.
+	 * It is safe for all supported character sets (incl. utf-8).
 	 * Unlike strtoupper() it does not honour the locale.
 	 *
 	 * @param   string      Input string
 	 * @return  string      Uppercase String
+	 * @deprecated since TYPO3 4.3 - Use t3lib_cs::conv_case() instead!
 	 */
 	public static function strtoupper($str) {
-		return strtr((string)$str, 'abcdefghijklmnopqrstuvwxyz', 
'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+		self::logDeprecatedFunction();
+
+		if (is_object($GLOBALS['LANG']))	{
+			$csConvObj = &$GLOBALS['LANG']->csConvObj;
+			$charset = $GLOBALS['LANG']->charSet;
+		} elseif (is_object($GLOBALS['TSFE']))	{
+			$csConvObj = &$GLOBALS['TSFE']->csConvObj;
+			$charset = $GLOBALS['TSFE']->renderCharset;
+		} else {
+			$csConvObj = t3lib_div::makeInstance('t3lib_cs');
+			$defaultCharset = 'iso-8859-1';
+			$charset = ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset']) ? 
$GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] : $defaultCharset;
+		}
+
+		return $csConvObj->conv_case($charset, (string)$str, 'toUpper');
 	}

 	/**
@@ -1530,9 +1545,24 @@
 	 *
 	 * @param	string		Input string
 	 * @return	string		Lowercase String
+	 * @deprecated since TYPO3 4.3 - Use t3lib_cs::conv_case() instead!
 	 */
 	public static function strtolower($str)	{
-		return strtr((string)$str, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
'abcdefghijklmnopqrstuvwxyz');
+		self::logDeprecatedFunction();
+
+		if (is_object($GLOBALS['LANG']))	{
+			$csConvObj = &$GLOBALS['LANG']->csConvObj;
+			$charset = $GLOBALS['LANG']->charSet;
+		} elseif (is_object($GLOBALS['TSFE']))	{
+			$csConvObj = &$GLOBALS['TSFE']->csConvObj;
+			$charset = $GLOBALS['TSFE']->renderCharset;
+		} else {
+			$csConvObj = t3lib_div::makeInstance('t3lib_cs');
+			$defaultCharset = 'iso-8859-1';
+			$charset = ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset']) ? 
$GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] : $defaultCharset;
+		}
+
+		return $csConvObj->conv_case($charset, (string)$str, 'toLower');
 	}

 	/** 


begin 666 bug_11698.diff
M26YD97 at Z('0S;&EB+V-L87-S+G0S;&EB7V1I=BYP:' */3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/0HM+2T@=#-L:6(O8VQA<W,N=#-L:6)?9&EV+G!H< DH4F5V
M:7-I;VX at -3<W.2D**RLK('0S;&EB+V-L87-S+G0S;&EB7V1I=BYP:' )*$%R
M8F5I='-K;W!I92D*0$ @+3$U,3$L,34@*S$U,3$L,S @0$ *( H@"2\J*@H@
M"2 J($-O;G9E<G1S('-T<FEN9R!T;R!U<'!E<F-A<V4*+0D@*B!4:&4 at 9G5N
M8W1I;VX at 8V]N=F5R=', at 86QL($QA=&EN(&-H87)A8W1E<G,@*&$M>BP at 8G5T
M(&YO(&%C8V5N=',L(&5T8RD@=&\*+0D@*B!U<'!E<F-A<V4N($ET(&ES('-A
M9F4 at 9F]R(&%L;"!S=7!P;W)T960 at 8VAA<F%C=&5R('-E=',@*&EN8VPN('5T
M9BTX*2X**PD@*B!4:&4 at 9G5N8W1I;VX at 8V]N=F5R=', at 86QL(&-H87)A8W1E
M<G,@=&\@=7!P97)C87-E+ at HK"2 J($ET(&ES('-A9F4 at 9F]R(&%L;"!S=7!P
M;W)T960 at 8VAA<F%C=&5R('-E=',@*&EN8VPN('5T9BTX*2X*( D@*B!5;FQI
M:V4@<W1R=&]U<'!E<B at I(&ET(&1O97,@;F]T(&AO;F]U<B!T:&4@;&]C86QE
M+ at H@"2 J"B )("H at 0'!A<F%M(" @<W1R:6YG(" @(" @26YP=70@<W1R:6YG
M"B )("H at 0')E='5R;B @<W1R:6YG(" @(" @57!P97)C87-E(%-T<FEN9PHK
M"2 J($!D97!R96-A=&5D('-I;F-E(%194$\S(#0N,R M(%5S92!T,VQI8E]C
M<SHZ8V]N=E]C87-E*"D@:6YS=&5A9"$*( D@*B\*( EP=6)L:6,@<W1A=&EC
M(&9U;F-T:6]N('-T<G1O=7!P97(H)'-T<BD@>PHM"0ER971U<FX@<W1R='(H
M*'-T<FEN9RDD<W1R+" G86)C9&5F9VAI:FML;6YO<'%R<W1U=G=X>7HG+" G
M04)#1$5&1TA)2DM,34Y/4%%24U155E=865HG*3L**PD)<V5L9CHZ;&]G1&5P
M<F5C871E9$9U;F-T:6]N*"D["BL**PD):68@*&ES7V]B:F5C="@D1TQ/0D%,
M4ULG3$%.1R==*2D)>PHK"0D))&-S0V]N=D]B:B ]("8D1TQ/0D%,4ULG3$%.
M1R==+3YC<T-O;G9/8FH["BL)"0DD8VAA<G-E=" ]("1'3$]"04Q36R=,04Y'
M)UTM/F-H87)3970["BL)"7T at 96QS96EF("AI<U]O8FIE8W0H)$=,3T)!3%-;
M)U131D4G72DI"7L**PD)"21C<T-O;G9/8FH@/2 F)$=,3T)!3%-;)U131D4G
M72T^8W-#;VYV3V)J.PHK"0D))&-H87)S970@/2 D1TQ/0D%,4ULG5%-&12==
M+3YR96YD97)#:&%R<V5T.PHK"0E](&5L<V4@>PHK"0D))&-S0V]N=D]B:B ]
M('0S;&EB7V1I=CHZ;6%K94EN<W1A;F-E*"=T,VQI8E]C<R<I.PHK"0D))&1E
M9F%U;'1#:&%R<V5T(#T@)VES;RTX.#4Y+3$G.PHK"0D))&-H87)S970@/2 H
M)$=,3T)!3%-;)U194$\S7T-/3D9?5D%24R==6R="12==6R=F;W)C94-H87)S
M970G72D@/R D1TQ/0D%,4ULG5%E03S-?0T].1E]605)3)UU;)T)%)UU;)V9O
M<F-E0VAA<G-E="==(#H@)&1E9F%U;'1#:&%R<V5T.PHK"0E]"BL**PD)<F5T
M=7)N("1C<T-O;G9/8FHM/F-O;G9?8V%S92 at D8VAA<G-E="P@*'-T<FEN9RDD
M<W1R+" G=&]5<'!E<B<I.PH@"7T*( H@"2\J*@I 0" M,34S,"PY("LQ-30U
M+#(T($! "B )("H*( D@*B! <&%R86T)<W1R:6YG"0E);G!U="!S=')I;F<*
M( D@*B! <F5T=7)N"7-T<FEN9PD)3&]W97)C87-E(%-T<FEN9PHK"2 J($!D
M97!R96-A=&5D('-I;F-E(%194$\S(#0N,R M(%5S92!T,VQI8E]C<SHZ8V]N
M=E]C87-E*"D@:6YS=&5A9"$*( D@*B\*( EP=6)L:6,@<W1A=&EC(&9U;F-T
M:6]N('-T<G1O;&]W97(H)'-T<BD)>PHM"0ER971U<FX@<W1R='(H*'-T<FEN
M9RDD<W1R+" G04)#1$5&1TA)2DM,34Y/4%%24U155E=865HG+" G86)C9&5F
M9VAI:FML;6YO<'%R<W1U=G=X>7HG*3L**PD)<V5L9CHZ;&]G1&5P<F5C871E
M9$9U;F-T:6]N*"D["BL**PD):68@*&ES7V]B:F5C="@D1TQ/0D%,4ULG3$%.
M1R==*2D)>PHK"0D))&-S0V]N=D]B:B ]("8D1TQ/0D%,4ULG3$%.1R==+3YC
M<T-O;G9/8FH["BL)"0DD8VAA<G-E=" ]("1'3$]"04Q36R=,04Y')UTM/F-H
M87)3970["BL)"7T at 96QS96EF("AI<U]O8FIE8W0H)$=,3T)!3%-;)U131D4G
M72DI"7L**PD)"21C<T-O;G9/8FH@/2 F)$=,3T)!3%-;)U131D4G72T^8W-#
M;VYV3V)J.PHK"0D))&-H87)S970@/2 D1TQ/0D%,4ULG5%-&12==+3YR96YD
M97)#:&%R<V5T.PHK"0E](&5L<V4@>PHK"0D))&-S0V]N=D]B:B ]('0S;&EB
M7V1I=CHZ;6%K94EN<W1A;F-E*"=T,VQI8E]C<R<I.PHK"0D))&1E9F%U;'1#
M:&%R<V5T(#T@)VES;RTX.#4Y+3$G.PHK"0D))&-H87)S970@/2 H)$=,3T)!
M3%-;)U194$\S7T-/3D9?5D%24R==6R="12==6R=F;W)C94-H87)S970G72D@
M/R D1TQ/0D%,4ULG5%E03S-?0T].1E]605)3)UU;)T)%)UU;)V9O<F-E0VAA
M<G-E="==(#H@)&1E9F%U;'1#:&%R<V5T.PHK"0E]"BL**PD)<F5T=7)N("1C
M<T-O;G9/8FHM/F-O;G9?8V%S92 at D8VAA<G-E="P@*'-T<FEN9RDD<W1R+" G
7=&],;W=E<B<I.PH@"7T*( H@"2\J*@H`
`
end



More information about the TYPO3-team-core mailing list