Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> str_ireplace, Проблема с пробелами 
:(
    Опции темы
madFobos
Дата 16.8.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: нет
Всего: 3




Модератор: Сообщение скрыто.

PM MAIL   Вверх
madFobos
Дата 17.8.2007, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: нет
Всего: 3



Блин, я так и не нашел ответа. Пришлось делать так:

Код

        $before = addcslashes($before, '\.\/()\"[]');
        $before = preg_replace("/\s+/", "(\xA0+|\s+)", $before);
        $document = preg_replace("/".$before."/", $after, $document);


Причем самое странное, что часть проелов документа реагирует только на \s, а часть только \xA0. Хотя по идее \s должен включать в себя \xA0 (HEX пробела). Если кто-то все таки знает ответ, сообщите, плиз.
PM MAIL   Вверх
sTa1kEr
Дата 17.8.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



madFobos, Код обычного пробела вовсе не 0xA0, а 0x20 http://www.asciitable.com/ Но во многих кодировках (в.т.ч. и в ISO-8859-1) так же существует еще один, так называемый, не разрывной пробел (NO-BREAK SPACE). Именно он и имеет код 0xA0. Т.ч. вполне логично, что str_ireplace() не находит пробела.

Цитата(madFobos @  16.8.2007,  22:51 Найти цитируемый пост)
Собственно рег. выражения использовать не получается, т.к. там есть в условиях и скобки и точки и пр. хрень, да и не нужно это.

Цитата(madFobos @  17.8.2007,  07:38 Найти цитируемый пост)
 $before = addcslashes($before, '\.\/()\"[]');

Для того, что бы безопасно использовать обычный шаблон в шаблоне регулярных выражениях существует функция preg_quote(), которая экранирует все спецсимволы используемые в регулярных выражениях.

Цитата(madFobos @  17.8.2007,  07:38 Найти цитируемый пост)
Причем самое странное, что часть проелов документа реагирует только на \s, а часть только \xA0. Хотя по идее \s должен включать в себя \xA0 (HEX пробела). Если кто-то все таки знает ответ, сообщите, плиз. 

А вот тут уже, вероятно, виновата именно локаль, точнее даже кодировка локали. Т.к. к примеру в cp866 и, если не ошибаюсь, в koi8-r нету не разрывного пробела.
PM MAIL   Вверх
madFobos
Дата 17.8.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: нет
Всего: 3



Цитата(sTa1kEr @  17.8.2007,  11:49 Найти цитируемый пост)
Для того, что бы безопасно использовать обычный шаблон в шаблоне регулярных выражениях существует функция preg_quote(), которая экранирует все спецсимволы используемые в регулярных выражениях.


Спасибо, что-то как-то мимо эту функцию пропустил

Цитата(sTa1kEr @  17.8.2007,  11:49 Найти цитируемый пост)
А вот тут уже, вероятно, виновата именно локаль, точнее даже кодировка локали. Т.к. к примеру в cp866 и, если не ошибаюсь, в koi8-r нету не разрывного пробела. 


Я так понимаю, что DomDocument конвертит часть пробелов в html-представление ( ), а когда делается html_entity_decode, то получается как раз 0xA0. Судя по всему в этом и причина. И судя по тому что документ создан в ISO-8859-1, а DomDocument коннектится всегда в UTF-8, то в UTF-8 локали тоже нет неразрывного пробела.

Думаю теперь все прояснилось. В любом случае, спасибо sTa1kEr.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.