我正在使用异常字符串的switch-function,应该更改正确的h1-titles等等。
我的目标是减少function ausnahme
的例外情况。
function ausnahme($value) {
global $value; // now the function ausnahme may change the variable
switch ($value) {
case "kern teilchenphysik": $value = "Kern-/Teilchenphysik";
break;
case "tipps tricks": $value = "Tipps & Tricks";
break;
case "erich honecker": $value = "Erich Honecker";
break;
case "ökogeographische regeln": $value = "Ökogeographische Regeln";
break;
}
return $value;
}
此开关现在有3000行,我希望在此功能开关之前有规则。
示例:要删除所有带有2个单词或更好的x-words的开关项,这些单词都应以大写字母开头,我希望我的函数是bigwords:
示例:双字 - >两个单词,三个单词表达 - >三字表达
不应该允许某些词语像'und','das';'der','die'等一样大写。
function bigwords($value) {
global $value;
$value = "X" . $value;
// Hilfsvariable,da & sonst auf Position 0 steht,
// was gleichbedeutend mit FALSE/NULL angesehen wird
if (strpos($value, "&a") == "1") {
$value = substr($value, 2);
$value = "&" . ucfirst($value);
} elseif (strpos($value, "&o") == "1") {
$value = substr($value, 2);
$value = "&" . ucfirst($value);
} elseif (strpos($value, "&u") == "1") {
$value = substr($value, 2);
$value = "&" . ucfirst($value);
} else {
// X wieder entfernen
$value = substr($value, 1);
$value = ucfirst($value);
}
}
我可以在切换之前用这个部分删除许多切换线,因为对于其他一些情况不同或我会称之为异常的例外;-)。 另一个问题是德语变音符号:
示例:'oeffnung-boerse-oekologie'现在是:'Öffnungbörseökologie'
我想用function bigwords
和function umlaute
来实现:'ÖffnungBörseÖkologie'。
function umlaute($value) {
global $value; // 12.07.14 str_replace changed from eregi_replace/ 22.07.14 mehrere str_replace mit arrays geändert
$from = ['-', 'ae', 'oe', 'ue', 'Ae', 'Oe', 'Ue'];
$to = [' ', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'];
$value = mb_strtolower(str_replace($from, $to, $value), 'utf-8');
// ACHTUNG! Dadurch greift die "erster Buchstabe Groß"-Regel nicht mehr, da erster
// "Buchstabe" nun das Kaufmanns-Und ist! -> wird in bigwords ersetzt
}
//最后2条评论可能已经过时,因为我认为bigwords-rule适用于此功能。我以前的程序员写脚本的东西,第一个字母是'&'这个功能之后不再是一封信了。
随时提供现有function bigwords
和function umlaute
的提示
谢谢你的帮助。
答案 0 :(得分:0)
如果我理解你,这应该可以解决问题:
<?php
$noUpper = [];
foreach (
['und','das','der','die']
as $k
) $noUpper[$k] = true;
function prettify($inStr){
global $noUpper;
$out = [];
foreach (
explode(" ", $inStr)
as $chunk
) array_push($out, @ $noUpper[$chunk] ? $chunk : ucfirst($chunk));
return htmlentities(implode(" ", $out));
};
echo prettify("hello und me no das & der die"); // Sorry: I don't understand German ;-)
// Output: "Hello und Me No das & der die"
对于html实体翻译,我使用了现有的htmlentities()php函数。
修改强>
新版本,注释中提到了修改:
<?php
function prettify($inStr){
static $noUpper;
if (is_null($noUpper)) { // Messy static trick
$noUpper = [];
foreach (
['und','das','der','die']
as $k
) $noUpper[$k] = true;
};
$out = [];
foreach (
explode("-", $inStr)
as $chunk
) array_push($out, @ $noUpper[$chunk] ? $chunk : ucfirst($chunk));
return htmlentities(implode(" ", $out));
};
echo prettify("hello-und-me-no-das-&-der-die"); // Sorry: I don't understand German ;-)
// Output: "Hello und Me No das & der die"
...而且,作为(好的)基于闭包的实现的一个例子,这将是javascript中的相同实现:
"use strict";
var prettify = (function(){
// Notice, this is only internally visible scope.
var noUpper = {};
for (
let k of ['und','das','der','die']
) noUpper[k] = true;
function htmlentities(str){
// There is no native php htmlentities() equivalent in javascript.
// So should implement it or rely on existing implementations in external
// modules such underscore.
// I left it empty because it is only for explanatory purposes.
return str.replace("&", "&"); // (Just to match PHP example...)
};
// ...and below function would be the only thing visible (exposed) outside.
return function prettify_implementation(inStr){
return htmlentities(inStr
.split("-")
.map(function(chunk){
chunk = chunk.toLowerCase();
return noUpper[chunk]
? chunk
: chunk.substring(0, 1).toUpperCase()
+chunk.substring(1)
;
})
.join(" ")
);
};
})();
console.log(prettify("hello-und-me-no-das-&-der-die")); // Sorry: I don't understand German ;-)
// Output: "Hello und Me No das & der die"