Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
#1

Обработка пробелов после и до кавычек - PHP

05.07.2016, 09:20. Просмотров 258. Ответов 13
Метки нет (Все метки)

Помогите придумать логику:
у меня есть данные, которые выглядят примерно так
1) ООО "НОВОТРОН"
2) ООО " Короед"
3) ПАО " ТД "КЛИО "

Первый пункт - идеальный, он так и должен выглядеть. А вот второй и третий содержат лишние пробелы - во 2-м пункте перед словом "Короед", а в третьем - перед аббревиатурой "ТД" и после слова "КЛИО"
Мне требуется обработать любую строку так, чтобы у меня были открывающие кавычки без следующего за ним пробела(ов), и закрывающие без пробела(ов) перед ними

Никак не соображу как мне это сделать

Заранее спасибо за дельные мысли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 09:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обработка пробелов после и до кавычек (PHP):

обработка после селекста
Добрый день, такой вопрос. Я делаю выборку из базы селектом и получаю...

Обработка данных после нажатия кнопки
Доброго всем вечера! Возникла проблема следующего характера - я не знаю как...

Не хватает кавычек
Хочу выводить форму при получении гет запроса. С условием всё понятно, а как...

Экранирование кавычек
Привет парни. Как правильно заэкранировать кавычки в примере снизу? Мой...

Экранирование кавычек
Всем доброе утро! При показе данных заменяет ' или " на \' и \"...

Экранирование кавычек
В общем берем html код веб страницы сайта. Далее необходимо этот код занести в...

13
dezforse
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
05.07.2016, 10:12 #2
Laroux, для подобных целей обычно используют регулярные выражения, они позволяют найти сложные сочетания символов и далее по вашему усмотрению сделать с ними любые необходимые операции.
Ссылка: http://www.php.su/articles/?cat=regexp&page=008

Не по теме:

Я, к сожалению, ими не владею, подсказать код не смогу, но уверен, что есть на форуме программисты, которые подскажут

0
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
05.07.2016, 10:41  [ТС] #3
я тут сидел думал над этой фигней. В итоге я понял, что задача нерешаемая.
Вот просто пример:
Кооператив "Сезон" (ОК)"
Общество "Торговый дом "Север"
0
dezforse
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
05.07.2016, 10:55 #4
Laroux, на самом деле, описать все возможные случаи вполне реально, но это займет просто уйму времени и сил.
0
ns16
93 / 93 / 68
Регистрация: 26.03.2015
Сообщений: 248
05.07.2016, 11:09 #5
Цитата Сообщение от Laroux Посмотреть сообщение
3) ПАО " ТД "КЛИО "
У вас где-то кавычка потерялась? Почему кавычек нечетное число? Или я что-то не так понял? То же самое с
Цитата Сообщение от Laroux Посмотреть сообщение
Кооператив "Сезон" (ОК)"
Общество "Торговый дом "Север"
0
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
05.07.2016, 11:16  [ТС] #6
ns16, ну на самом деле действительно, должно быть типа ПАО "ТД "КЛИО"", но по правилам русского языка две кавычки подряд не пишутся
0
Jodah
05.07.2016, 11:16
  #7

Не по теме:

Цитата Сообщение от ns16 Посмотреть сообщение
У вас где-то кавычка потерялась?
Всё нормально, таковы правила русского языка.

0
ns16
93 / 93 / 68
Регистрация: 26.03.2015
Сообщений: 248
05.07.2016, 11:48 #8
Laroux, понял. Это все осложняет, потому что становится не ясно, является средняя кавычка второй открывающей или же первой закрывающей. Плюс кавычек может быть не три, а две. Так что соглашусь с тем, задача нерешаемая.
0
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
05.07.2016, 11:56  [ТС] #9
ns16, зато с первой и последней кавычками все предельно ясно) И то радует

Добавлено через 4 минуты
Блин, да что ж такое..
PHP
1
echo mb_stripos ($a['OrgNameFull'],'щ',0,'Windows-1251');
работает
а вот
PHP
1
echo mb_stripos ($a['OrgNameFull'],'"',0,'Windows-1251');
не работает. Какого?

Добавлено через 2 минуты
Вопрос снимается.. надо было так
PHP
1
echo mb_stripos ($a['OrgNameFull'],'& #34;',0,'Windows-1251');
- & #34; без пробела
0
Para bellum
Эксперт PHP
3937 / 2923 / 922
Регистрация: 06.01.2011
Сообщений: 8,560
05.07.2016, 12:42 #10
А названия компаний в строке надо искать? Или они -- каждая в отдельной строке? Если каждая в отдельной, то можно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    function replace($value){
        return preg_replace('~"\s*|\s*"$~', '$1"', $value);
    }
    
    $data = [
        'ООО "НОВОТРОН"',
        'ООО " Короед"',
        'ПАО " ТД "КЛИО  "',
        '" Газпром "'
    ];
    
    foreach($data as $value)
        echo "Было: [{$value}] Стало: [". replace($value) ."]" . PHP_EOL;
0
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
05.07.2016, 12:46  [ТС] #11
Para bellum, крутяк регулярки форева. Только я нифига не понимаю, как они работают.

Я сделал так:
PHP
1
2
3
4
5
6
7
8
9
10
    function RightQuote($srtq) {
        if (mb_stripos ($srtq,'"',0,'Windows-1251')) {
            $part1 = mb_substr($srtq,0,mb_stripos ($srtq,'"',0,'Windows-1251')-1);
            $part2 = mb_substr($srtq,mb_stripos ($srtq,'"',0,'Windows-1251')+5,mb_strripos ($srtq,'"',0,'Windows-1251')-mb_stripos ($srtq,'"',0,'Windows-1251')-5);
            $srtq=trim($part1).' "'.trim($part2).'"';
        }
        $srtq=str_replace('"', '"',$srtq);
        $srtq=htmlspecialchars($srtq);
        return $srtq;
    }
0
Para bellum
Эксперт PHP
3937 / 2923 / 922
Регистрация: 06.01.2011
Сообщений: 8,560
05.07.2016, 13:08 #12
Laroux, это точно работает?
На это:
PHP
1
echo RightQuote('ПАО " ТД "КЛИО "');
Мне выдаёт:
HTML5
1
ПАО &quot; &quot;&quot;&quot;
0
Laroux
170 / 165 / 75
Регистрация: 21.11.2014
Сообщений: 1,439
05.07.2016, 13:12  [ТС] #13
Para bellum, дело в том, что редактор кода форума превращает коды спецсимволов в символы, поэтому код кривой в моем сообщении
0
Para bellum
Эксперт PHP
3937 / 2923 / 922
Регистрация: 06.01.2011
Сообщений: 8,560
05.07.2016, 13:15 #14
Цитата Сообщение от Laroux Посмотреть сообщение
Только я нифига не понимаю, как они работают.
Код
~"\s*|\s*"$~
Заменить кавычку и любое количество пробелов после неё на X или любое количество пробелов и кавычку после них на X.
Где X -- кавычка.
Кстати, доллар-один там лишнее -- случайно осталось от других вариантов, которые я тестировал.
Вот:
PHP
1
return preg_replace('~"\s*|\s*"$~', '"', $value);
1
05.07.2016, 13:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2016, 13:15
Привет! Вот еще темы с решениями:

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

Экранирование кавычек
Здравствуйте, помогите пожалуйста разобраться с элементарной на вид вещью. Есть...

Экранирование кавычек
Помогите пожалуйста, долго мучаюсь уже. if ($password == $result) {...

решение конфликта кавычек
Писал сайт на заказ и столкнулся с такой проблемой. Идет форма окна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru