2012-02-11 1 views
1

% 기호를 필터링하려고하는 PHP 문자열에 쿼리가 있습니다. 모든 것이 utf-8입니다. 문자열에 % (예 : % acheron)가 들어 있으면 해당 엔티티로 변환됩니다 (문자열에 % ac 시퀀스에 의해 해석되는 'not'기호 문자가되는 경우). 나는이 문자의 들어오는 문자열을 깨끗하게 할 수있을 것 같다./ 스크립트에서 이미 "디코딩 된"시간 때문에 PHP 대체 문자열을 지울 수 없다.PHP 클린 들어오는 문자열 % 기호가

내가 알아낼 수있는 유일한 방법은 rawurlencode를 사용하여 청소하는 것이지만, 그게 진절머리가 나는 해결책과 다른 캐릭터와 문제를 일으키는 것처럼 보입니다.

문자열의 나머지 부분에 영향을주지 않고 이러한 문자를 지우는 더 효율적인 방법이 있습니까? 예를 들어 문자열에서 % & # (및 다른 문자열)을 제거하는 함수를 찾고 있지만 그렇지 않으면 그대로 둡니다. (preg_replace가 작동하지 않습니다.)

다른 말로하면 문자열에서 받아 들일 수있는 특수 문자가 없기 때문에 문자열을 제거 할 수있는 방법이 있습니다.

EDIT : 쿼리가 GET을 통해 들어오지 만 분명하지 않습니다. EDIT2 : urlecode 또는 rawurl로 인코딩 : % acheron이 % ACheron으로 변환되었지만 (어쩌면 정리할 수 있음) ^ acheron이 % 5Eacheron으로 변환되므로 (패턴을 통해 거의 지울 수 없음) ...

내 질문의 noobishness 감사 래리

+0

에 대한 배열? –

+0

나는 rawurlencode와 비슷한 것을 시도해 보았습니다. 그러나 그 중 하나를 사용하면 % ACheron으로 돌아 오지만 입력이^Acheron이면 동일한 기능으로 % 5Eacheron으로 변환됩니다. – Larry

+0

어떤 브라우저를 사용하고 있는데 % ac를^양식 제출 중에 있습니까? –

답변

1

$ 문자열 = preg_replace이다 ("/ (% | & | #)를/',' ', $ 문자열) 서하십시오;

이와 비슷한? 내가 당신의 문제를 이해한다면 이것은 효과가있을 것입니다.

편집 : 좋아,이 당신을 위해 무엇을 찾고있는 사람입니다 : 않는 str_replace 당신을 위해 무엇을 찾고있는 것처럼

<?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; 
?> 
+0

가벼운 텍스트 대체를 위해 정규 표현식 사용을 투표 한 지역 주민들에게는 효과가 있습니다. –

+0

안녕하세요, 고마워,하지만이 웹 양식에서 입력 된대로 작동하지 않습니다 그리고 그것은 이미 인코딩/% ac (이 경우) "not"기호에 디코드했습니다 시간에 의해 – Larry

+0

더 설명해주십시오. 어떤 일이 일어나기 전에이 수표를 추가 하시겠습니까? 또한 어떻게 디코드되어 보이는지, 아니면 디코딩으로 무엇을 의미합니까? – Alice

1

그것은 나에게 소리.

예를 들어

:

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

당신은 aswell $search에 대한 배열을 만들 수 있으며, 각각 처음에 URLDECODE()를 실행 시도 $replace

+0

아쉽게도 스크립트에서 문자열이 변환 될 때까지 작동하지 않습니다. 문자열의 % ac 부분은 "not"기호로 나타납니다. 따라서 나는 그것을 그런 식으로 깨끗하게 할 수 없다. (아마 나는 이것이 웹 기반 폼 (GET)으로부터 입력이라고 언급하는 것을 게을리했다. – Larry