PHP чистая входящая строка со знаком% - PullRequest
1 голос
/ 11 февраля 2012

У меня есть запрос в строке php, который я пытаюсь отфильтровать по знакам%. Все это в UTF-8. Если строка содержит% (например,% acheron), она преобразуется в эквивалентную сущность (в случае, о котором я упоминаю, она становится символом «не», который интерпретируется последовательностью% ac в строке). Я не могу очистить входящую строку этого символа / Я не могу очистить строку с помощью замены php, потому что к тому времени, когда она в сценарии уже "декодирована?".

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

Есть ли более эффективный способ очистки этих символов без влияния на остальную часть строки? например, я ищу функцию, которая бы удаляла% & # (и любые другие) из строки, но в противном случае оставляла бы ее нетронутой. (у меня preg_replace не работает)

Другими словами, есть способ принять строку и очистить ее без преобразования каких-либо потенциально специальных символов, чтобы я мог убрать их из строки.

РЕДАКТИРОВАТЬ: запрос поступает через GET, не было ясно по этому вопросу. EDIT2: с помощью urlecode или rawurl кодировать: % acheron преобразуется в% ACheron (который можно очистить, я думаю), но ^ acheron преобразуется в% 5Eacheron (таким образом, почти невозможно очистить его с помощью шаблона) ...

Пожалуйста, извините за глупость моего вопроса Спасибо Ларри

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Мне кажется, что str_replace - это то, что вы ищете.

Например:

$text = "%acheron";
$search = "%";
$replace = ""; //or whatever you want to replace it with
echo str_replace($search, $replace, $text);

Вы также можете создать массив для $search и соответственно массив для $replace

1 голос
/ 11 февраля 2012

$ string = preg_replace ("/ (% | & | #) /", '', $ string);

Как то так? Это должно сработать, если я понял вашу проблему.

РЕДАКТИРОВАТЬ: Хорошо, это то, что вы ищете:

<?php
function myUrlEncode($string) {
    $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D', '%5E');
    $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]", "^");
    return str_replace($entities, $replacements, urlencode($string));
}


$search = myUrlEncode($_GET['id']);
$search = preg_replace("/(%|&|#)/", '', $search);

echo $search;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...