Поиск IMAP по теме не работает с символами препинания в Gmail

Я использую функцию imap_search() библиотеки PHP IMAP для поиска писем в почтовом ящике Gmail по строке темы.

imap_seach($mbox, 'ALL SUBJECT "<search string>"');

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

Есть ли стандартный способ отфильтровать строку поиска, чтобы она никогда не выдавала ошибки и возвращала некоторый результат? Я попытался токенизировать тему и удалить все слова из строки поиска, которые содержат даже один буквенно-цифровой символ. В основном это работает, но не работает, когда все слова имеют небуквенно-цифровой символ (что характерно для темы из одного или двух слов).


person Nands    schedule 29.09.2010    source источник
comment
Есть ли способ закодировать строку поиска в юникоде, а затем передать строку поиска. В соответствии с RFC 2047 эти символы являются специальными символами, например = (/) / ‹ / › / @ /, /; / : / ‹› / / / [ / ] / ? / . / = Я даже не могу понять, как их избежать   -  person Nands    schedule 22.10.2010
comment
Мои поиски работают нормально с символом @, но только спорадически - иногда правильные результаты находятся, иногда нет. Вы еще не разобрались со своей проблемой?   -  person Ben    schedule 30.12.2010
comment
Я не смог найти решение, которое работает в 100% случаях.   -  person Nands    schedule 12.01.2011
comment
Я также обнаружил ту же проблему с IMAP в команде SEARCH HEADER Message-ID xyz. Если xyz содержит ! или & (среди других символов), gmail в основном обрезает параметр в этой точке. По сути, abc&def становится abc, а !abc становится (т.е. поиск всего). Я не могу найти нигде в спецификации языка IMAP, описывающей, почему эти символы терпят неудачу или как их избежать.   -  person rocketmonkeys    schedule 06.03.2012
comment
Поместите print_r(imap_errors()); сразу после строки imap_search(), а затем создайте свою ошибку.   -  person fie    schedule 25.03.2012


Ответы (1)


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

Поэтому вам придется удалить все не буквенно-цифровые символы из строки поиска, и это сработает...

person Alex    schedule 24.03.2012