2012-03-16 5 views
0

굿모닝 코딩 젊은이,정규 표현식 청소 방법 PHP

내가 너무 깨끗하고 파일 이름에 특수 문자 (&, * 등)

이 내 코드의 모습을 어떻게에서 작은 정규식을 쓰고 있어요 :

public function clean($string, $bool = false) 
{ 
    $string = html_entity_decode($string, ENT_QUOTES); 
    $string = str_replace("'", "", $string); 
    $string = str_replace('"', "", $string); 
    $string = str_replace("&", "en", $string); 
    $string = str_replace("-", "_", $string); 

    //ALLE VAGE TEKENS VERVANGEN MET _ 
    $weirdChars = Proces::normalInput($string , true); 

    if(count($weirdChars[0]) > 0) 
    { 
     foreach($weirdChars[0] as $char) 
     { 
      $string = str_replace($char, "_", $string); 
     } 
    } 

    if($bool) 
    $string = ucfirst(preg_replace('!_+!', '_', strtolower($string))); 
    else 
    $string = preg_replace('!_+!', '_', strtolower($string)); 

    if(isset($string[0]) && $string[0] == "_") 
    $string = substr($string, 1); 
    if(substr($string, -1) == "_") 
    return substr($string,0,-1); 

    return $string; 
} 

public function normalInput($string, $bool = false) //STRING 
{ 
    $patern = '/[^_a-zA-Z0-9-]/'; 
    if(preg_match_all($patern, $string, $matches)) 
    { 
    if($bool) 
     return $matches; 
    else 
    return false; 
    } 
    else 
    { 
    if($bool) 
     return $matches; 
    else 
    return true; 
    } 
} 

이 두 가지 방법은 함께 작동하며 완벽하게 작동하지만 약간의 문제가 있음을 확인했습니다.

$patern = '/[^_a-zA-Z0-9-]/'; 

이 좋다하지만 난 파일 이름에있는 점을 제외하려는이 (그렇지 않으면 내 파일 확장자 대신 blaatfoo.pdf의 blaatfoo_pdf 같은 얻을 것이다) : 나는 normalInput 방법에 사용 패턴은 같다.

도와 주실 수 있습니까?

친절 감사를

Jordy Suos는

답변

3

Goedemorgen (커피 한 잔과 ME ON이 아름다운 아침에 ..에 좋은 sigarette을). ;-)

할 수 있습니다 사용 화이트리스트 또는 블랙리스트 중 하나 : 당신이 50 선을 계산 두 가지 기능이 필요하지 않도록 모두가 여기에있다입니다

// Whitelist alphanumeric, underscore, dash and dot 
$str = preg_replace("/[^a-z0-9-_\.]/", "_", strtolower($str)); 

// Blacklist 
$str = preg_replace("/[<>'\"\\\/\?\: (... and more) ]/", "_", strtolower($str)); 

. 필자는 입력란으로 어떤 문자를 받을지 결코 알 수 없으며 파일 이름에 원하지 않는 문자가 꽤 있기 때문에 화이트리스트 방법을 선호합니다.

$bool이 실제로 설명이 아니기 때문에 변수 및 함수 이름을 조사하는 것이 좋습니다. 원하는 경우 $ucFirst으로 전화하십시오.

+0

탑, bedankt를)! – Jordy

0

당신은 싶어이 시도 할 수 있습니다 :

$file_parts = pathinfo($string); 
$bad_chars = array_merge(array_map('chr', range(0,31)),array("<", ">", ":", '"', "/", "\\", "|", "?", "*", ".")); 
$filename = str_replace($bad_chars, "_", $file_parts['filename']); 
$string = $filename . "." . $file_parts['extension'];