2014-04-09 2 views
0

이 함수는 주어진 값을 위생 처리하기위한 것이지만 값이 지정되지 않은 것처럼 "n-a"를 출력합니다. 그것은 가장 간단한 문제가되어야하지만 바로 지금이 순간 저를 이깁니다.PHP 함수가 값을 반환하지 않는 이유는 무엇입니까?

function slug($text){ 

    // replace non letter or digits by - 
    $text = preg_replace('~[^pLd]+~u', '-', $text); 

    // trim 
    $text = trim($text, '-'); 

    // transliterate 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 

    // lowercase 
    $text = strtolower($text); 

    // remove unwanted characters 
    $text = preg_replace('~[^-w]+~', '', $text); 

    if (empty($text)) 
    { 
    return 'n-a'; 
    } 

    return $text; 
} 

일부 입력 사항을 부탁드립니다.

+2

** 어디 ** 비어 되는가? 당신이 따라갈 때 변수를 버리려고 했습니까? (대체 후, 트림 후, strtolower 후, 두 번째 치환 후) – h2ooooooo

+0

'$ text = preg_replace ('~ [^ - w] + ~', '', $ text);''-' 및' w'. 당신의 문자열에는'-' 또는'w'가 없다고 생각합니다. 그래서 빈 문자열이 나옵니다. 여기 정규식을 다시 작성하려고 시도하십시오 – krishna

답변

1
  1. iconv 대신 mb_string 라이브러리를 사용해보십시오. 그것의 더 나은 도서관.
  2. 각 인스턴스에서 var_dump 또는 echo를 사용하여 데이터가 반환되는지 확인하십시오.
  3. 당신은해야 잘못된 것 같다 첫 번째 정규 표현식을 변경해야
2

,

// replace non letter or digits by - 
$text = preg_replace('~[^\w\d]+~u', '-', $text); 

Working Demo.

+1

나는 그가 \ pL \ d (일명 유니 코드 문자/숫자)를 의미한다고 생각합니다. – h2ooooooo

+0

@ h2ooooooo - agree. – Rikesh

+0

@ h2ooooooo - 백 슬래시를 추가하면 내 문제가 해결됩니다. 즉, 첫 번째 정규식을 \ pL \ d에, 두 번째를 \ w – TimD

관련 문제