preg_replace - замена немецких букв на их десятичные эквиваленты

wbrframe

Новичок
preg_replace - замена немецких букв на их десятичные эквиваленты

Доброе время суток!

У меня стоит задача реализовать отображение немецких и русских букв на одной странице. В поисках решения я наткнулся на очень интересную статью:

Как сделать многоязычную WWW страницу

И возник вопрос, каким образом можно заменить в тексте немецкую букву, например a-umlaut, на ее десятичное представление ä

preg_replace("/ ??? /", "&#0228", $text);

И вообще мне встречались стр., у которых весь html в десятичном виде. Как они это делают ?

Спасибо.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Мда.
Странная "хотелка" какая-то
Обычно люди обратного хотят - преобразовать &#???? в человеческий вид...
УТФ чем тебе не подошел?
 

wbrframe

Новичок
вначале смотрел в сторону UTF-8, но не получилось настроить.
Перерыл уйму материала.

Перепробовал различные вариации:

- htaccess,
- header
- setlocale
- mb_* (кстати функция mb_strpos() поменяла кодировку)

Пытался найти ответ на sql.ru, не суждено. Дошел до этого маразма с html entities так как выхода больше не видел.

мой пост из sql.ru, чтобы понять проблему:

нужно было подружить движок DataLife Engine c UTF-8, так как контент сайта, мог быть на различных языках.
1. перекодировал все файлы в UTF-8
2. в meta выставил UTF-8
3. после подключения к БД и также вся БД в utf8_general_ci
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");


4. ini_set("default_charset", "utf8_general_ci");
5. на хостинге:
HTTP_ACCEPT_CHARSET - iso-8859-1, utf-8, utf-16, *;q=0.1

все отображалось отлично, русский, немецкий языки т.д.

в скрипте я использовал curl чтобы скачивать первую стр. сайта. нужно было парсить title, потомучто на хостинге функции: file_get_contents(), fopen откл. из-за безопасности.

потом хостеры начали выдергиватся. любой запрос и скачивается 301 ошибка. написал в саппорт, исправили. но потом начались проблемы с кодировкой.

немецкие, русские буквы после парсинга не добавляются в БД, а обрезаются на том месте где они появляются.
в файле я написал header("Content-Type: text/html; charset=UTF-8");, это не исправило ошибку.

я использовал функцию mb_convert_encoding($title, "UTF-8");
это исправило ошибку но только для немецких сайтов. русский текст - абракадабра и опять обрезает текст.

стоит поменять на header("Content-Type: text/html; charset=windows-1251"); и убрать соответственно mb_convert_encoding($title, "UTF-8"); русский отображается нормально, но немецкий нет.

задача усложняется еще тем, что я не могу заранее знать , на каком языке будет контент.

мне кажется хостинг что-то чудит. может кто-то встречался с проблемой, посоветуйте пжл как исправить.


В итоге я узнал в чем проблема:

preg_match('/<title>([^>]*)<\/title>/si', $contents, $match );

меняет кодировку. Но решить проблему так и не удалось.
 

dimagolov

Новичок
wbrframe, вот ты блин шаман....

открой http://ru.wikipedia.com и посмотри, как там на уровне html правильно реализована многоязычность. повтори такое сам для статического контента. потом идешь в FAQ, читанешь про кодировку UTF-8 и добиваешься, чтобы пхп код корректно обрабатывал это. и после этого и опять чтения соответствующего FAQ создаешь правильно БД и правильно ее наполняешь и убеждаешься, что все работает.

после всего этого выясняешь какие бока в тех данных, которые у тебя есть в базе и через dump правишь.
 

SiMM

Новичок
> потом хостеры начали выдергиватся
Давно пора купить нормальный хостинг.
 

wbrframe

Новичок
подскажите пжл, мало ли кто-то встречался.

функция preg_match меняет кодировку символов, какую можно найти альтернативу?

Я находил информацию насчет модификатора u, попробовал

"/<title>([^>]*)<\/title>/u" вообще ничего не находит.

пробовал mb_eregi("/<title>([^>]*)<\/title>/"), ничего не находит

До функции preg_match, нет вообще никаких конфликтов, немецкий, русский, франц. и т.д. отображаются отлично.

после функции, не могу ничерта сделать с текстом, + альтернативы никакие не работают.

Help me please! сижу уже 5 дн.
 

SiMM

Новичок
> функция preg_match меняет кодировку символов
Откуда такие далекоидущие выводы? С таким же успехом я могу утверждать, что str_replace меняет кодировку, или любая другая функция.

> "/<title>([^>]*)<\/title>/u"
Данный пример что с u, что без u, работать будет абсолютно одинаково - учите матчасть.
http://ru.wikipedia.org/wiki/UTF-8

[telepat mode]
s, i
кодировка исходника не в однобайтной кодировке и не в UTF-8
[/telepat mode]
 
Сверху