在PHP中未检测到变音符号

时间:2017-02-12 11:45:39

标签: php

我想将带有特殊字符的字符串转换为已清理的字符串。我正在使用以下代码。

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);
}

这适用于大多数类型的字符串,但不适用于包含德语变音符号的字符串。两个例子:

  1. Sinas sagt:“Wenn jemand es wagt,dann bin ich es” - &gt;的siNAs-SAGT --- WENN-jemand-ES-wagt - 达恩彬ICH-ES -
  2. Maier警告Müllervor“Harter Debatte” - &gt;麦尔-warnt-mÒ╝ller-VOR - 哈特-debatte -
  3. 如果我用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-

0 个答案:

没有答案