preg_replace — умлауты не обрабатываются на сервере

Я написал небольшую функцию для замены умлаутов и других специальных немецких символов в строке.

Все выглядит так:

function replace_german_chars($str)
{
return preg_replace(
array("/\s+/", "@\x{00e4}@u", "@\x{00fc}@u", "@\x{00f6}@u", "@\x{00df}@u"),
array("-", "ae", "ue", "oe", "ss"),
$str);
}

Этот код в основном зависит от этот комментарий в руководстве по PHP.

Тем не менее, он работает как на моем локальном хосте (Mac OSX Yosmite), но не на сервере. Вышеприведенная функция просто заменяет специальные символы ничем.

Любая идея?

[ОБНОВИТЬ]

После получения достаточного разрешения я смог вставить предложенный »ini_sets«. Некоторые из них, похоже, «выживают» на протяжении всего жизненного цикла приложения, а некоторые нет. Использование mb_convert_encoding до этого настройки работали, но не после и возвращались ? для всех матчей.

Я действительно не понимаю этого. Мне это как-то странно, так как кажется, что на самом деле в игре есть несколько кодировок, даже если Drupal заявляет, что он внутренне обрабатывает все в utf-8.

[ОБНОВЛЕНИЕ № 2]

Путешествие продолжается, настройка mbstring.http_output=UTF-8 заставляет Drupal сказать: «Отключи это»! Прямо сейчас у меня нет настоящей идеи, откуда все это может появиться, поэтому я решил опубликовать заголовок http страницы:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 25 Nov 2015 10:07:23 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
Content-Language: de
Link: </node/10>; rel="shortlink",</startseite>; rel="canonical"X-Generator: Drupal 7 (http://drupal.org)
X-Powered-By: PleskLin

Помимо этого, есть еще одна причина, которая может быть причиной проблемы: общая настройка параметров сортировки сервера базы данных в phpMyAdmin, Чтобы было ясно, вот изображение этого:

введите описание изображения здесь

Сам сервер базы данных настроен на использование UTF-8

2

Решение

preg_replace() ожидает utf-8 закодированная строка. Кажется, вы установили другую кодировку по умолчанию. Затем вам нужно конвертировать $str:

строка mb_convert_encoding (строка $str строка $to_encoding [, смешанный $from_encoding знак равно mb_internal_encoding() ])

Преобразует кодировку символов строки str в to_encoding от опционально from_encoding,

Эта функция получает внутреннюю кодировку from_encoding по умолчанию. Если он не обнаружен по умолчанию, установите кодировку с одного из поддерживаемые кодировки.


Код

function replace_german_chars($str)
{
return preg_replace(
array("/\s+/", "@\x{00e4}@u", "@\x{00fc}@u", "@\x{00f6}@u", "@\x{00df}@u"),
array("-", "ae", "ue", "oe", "ss"),
mb_convert_encoding($str, 'UTF-8') );
}

демонстрационная демонстрация

1

Другие решения

Наиболее вероятное решение вашего вопроса — это контент в юникоде.

Вы должны использовать следующий синтаксис в конфигурации Apache (в httpd.conf или .htaccess)

AddDefaultCharset utf-8

И в вашем php.ini указан ниже Конфигурация

default_charset = "utf-8"mbstring.internal_encoding=utf-8
mbstring.func_overload=6
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
0

По вопросам рекламы [email protected]