我想将带有特殊字符的字符串转换为已清理的字符串。我正在使用以下代码。
function sanitize($str) {
$value = strtolower(trim($str));
$find = ["?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", "%", "+", "“", "„", " ", chr(0)];
$value = str_replace($find, '-', $value);
$find = ['ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü'];
$replace = ['ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue'];
return str_replace($find, $replace, $value);
}
这适用于大多数类型的字符串,但不适用于包含德语变音符号的字符串。两个例子:
如果我用mb_detect_encoding
显示输入字符串的编码,我在两种情况下都会得到UTF-8。我需要更改什么来替换变音符号?
[UPDATE]
我已经做了一些调查(感谢评论中的提示)和我之前从Windows控制台复制的示例,所以我认为这可能是输出通道的编码问题。
但我的网站上的变音符号仍有一个问题。如果我在我的网站中包含输出,我会得到:maier-warnt-m%EF%BF%BDller-vor--harter-debatte-
,其编码为:http://psa-portal.test/news/2017/02/11/maier-warnt-m�ller-vor--harter-debatte-