2014-04-24 4 views
3
функции

PHP preg_quote ускользает эти символы . \ + * ? [^] $ () { } = ! < > | : -Как избежать только определенные символы

Не могли бы вы предложить то, что я мог бы использовать, чтобы избежать этих символов: + - && || ! () { } [ ]^" ~ * ? : /


Отредактировано (по желанию «на удержание "):

Я осуществляю поиск Solr, и он говорит:

Solr дает следующие символы особое значение, когда они появляются в запросе:
+ - & & || !() {} []^"~ *:/

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

+0

Espace или бежать? – Theolodis

+1

Отлично. Вы знаете, что такое 'preg_quote()'. Теперь, пожалуйста, прочитайте его список параметров со своим описанием. –

+0

Алма: если бы я это правильно понял, я могу указать разделитель в этой функции, чтобы он также экранировался, но это не помогает моей ситуации, так как этот разделитель не будет выпускать другие символы по умолчанию, которые Функция 'preg_quote' выходит из экранирования. – qwaz

ответ

3

Это может помочь вам:

<?php 
$subject = "+ - && || ! () { } [ ]^\" ~ * ? : /"; 
$result = preg_replace('%([+\-&|!(){}[\]^"~*?:/]+)%', '\\\\$1', $subject); 
echo $result; 
?> 

http://ideone.com/EYV1ID

+0

Это отлично работает для меня. Спасибо – qwaz

+0

Собственно, как вы можете «убежать», например, '||'? Это __two__ символы, а не один. Таким образом, какова будет разница со стандартными параметрами 'preg_quote()'? –

+1

@dmit На мой взгляд это решение неверно. Например, он убежит '&', даже если он не является частью '&&'. То же самое с одиноким '' '. Чтобы решить это, см. Мое решение. – zx81

1

Может быть нет. лучший подход, но будет работать:

str_replace('+','\+',$MyString); 
str_replace('-','\-',$MyString); 
...............................; 
...............................; 
+0

Ну, по крайней мере, используйте оператор 'foreach' и массив, чтобы сделать его немного более раздутым. – RichouHunter

0

Работа функции

function escapeWildcards($s){ 
    $escapeChars = [ '%', '_']; 
    foreach ($escapeChars as $escapeChar){ 
     $s = str_replace($escapeChar, '\\'.$escapeChar, $s); 
    } 
    return $s; 
} 
Смежные вопросы