php
  • newline
  • strpos
  • 2013-01-05 2 views 0 likes 
    0

    저는 PHP에 매우 익숙하며이를 수정하는 방법을 찾을 수 없습니다. 양식이 있고 일부 문자열을 전달하고 다른 파일로 검사하도록하고 싶습니다. 모든 문자열이 같은 줄에 있지만 문자열의 여러 줄을 입력하자마자 실패합니다. , 나는 PHP 페이지를 열고 단지 개 또는 고양이를 입력 할 때마다 strpos를 개행 문자로 사용할 수 없습니다.

    <?php 
    echo "<center><form method='post' enctype='multipart/form-data'>"; 
    echo "<b></b><textarea name='texttofind' cols='80' rows='10'></textarea><br>"; 
    echo "<input name='submit' type='submit' style='width:80px' value='Run' />"; 
    echo "</form></center>"; 
    
    $texttofind = $_POST['texttofind']; 
    if(get_magic_quotes_gpc()) { 
        $texttofind = stripslashes($texttofind); 
    } 
    $texttofind = html_entity_decode($texttofind); 
    $s = file_get_contents ("/home/xxxxx/public_html/abc.txt"); 
    if (strpos ($s, $texttofind) === false) { 
        echo "not found"; 
    } 
    else 
        echo "found"; 
    ?> 
    

    및 abc.txt에

    , 내가

    dog 
    cat 
    rat 
    

    있습니다

    는 다음 코드와 PHP 파일을 괜찮을 것이고 'found' 메시지를 보여줄 것입니다. 그러나 'dog <enter on keyboard> cat'과 같이 여러 줄을 입력하고 submit 버튼을 클릭하면 'not found' 메시지와 함께 반환됩니다.

    여러 줄을 검색 할 수 있도록 코드를 수정하면 어떨까요?

    미리 감사드립니다.

    +0

    은 그래서 당신은 모두에 대해 확인하려면? 간단한 루프가 여기에 있습니다. –

    +0

    파일이 줄 구분 기호로'\ n'을 사용하고 있지만 브라우저가'\ r \ n '을 (를) 보내고 있습니다. –

    +0

    은 Hanky에서 작업 코드를 받았습니다. 문제가 해결되었습니다. Hanky, Dan, Marc에게 감사드립니다. – user1951663

    답변

    0
    <?php 
    $values=explode("\n",$txttofind); 
    foreach($values as $value) 
    { 
        if (strpos ($s, $value) === false) 
        { 
         echo "$value : not found <br>"; 
        } 
        else 
        { 
         echo "$value : found <br>"; 
        } 
    } 
    ?> 
    
    +0

    각 입력란을 개별적으로 검색하려는 경우에만 해당합니다. –

    +0

    각 입력란을 개별적으로 입력하지 않고 정확하게 입력해야합니다. 어쨌든 고마워. – user1951663

    +0

    그게 쉽지. 그런 다음 자신 만의 코드를 실행하고 비교를하기 전에 $ s = str_replace ("\ r", "", $ s); 또한 $ texttofind = str_replace ("\ r", "", $ texttofind); –

    0

    검색 단어를 줄 바꿈에 추가하면 비교 파일에없는 문자가 추가됩니다. 예 : 당신은 입력 할 때 ...

    개 고양이 당신은 실제로처럼 보이는 문자열을 보내는

    쥐 ...

    어디 \ n을 "개 \ ncat \ nrat" 문자 13 또는 표준 non windows 개행 문자를 의미합니다. 이 문제에 대한 해결 방법은 원하는 작업에 따라 다릅니다. 당신은 지금 ... 배열로 입력 문자열을 변환하고 각 단어에 대한 위치를 얻기 위해 PHP의 폭발 기능을 사용하여 결과를

    $inputs = explode("\n", $_POST['field']); 
    $positions = array(); 
    
    foreach($inputs as $val) 
        $positions[] = str_pos($compareTo, $val); 
    

    를 검색 할 수 있습니다 $ 위치는 각 라인에 대한 발견 어디에있는 str_pos 년대의 배열이 .

    비교 파일에 새로운 줄이 있는지 또는 다른 줄 문자가 없는지 상관하지 않는 모든 텍스트가 비교 파일에 있음을 계속 검색하려고하는 경우 (\ 안전한 방금)

    $inputs = str_replace("\n", "", $_POST['field']); 
    $inputs = str_replace("\r", "", $inputs); 
    

    입력이 "dogcatrat"가됩니다. str_replace의 두 번째 인수를 사용하여 \ n 대신 공백을 설정하여 공백으로 구분 된 목록으로 돌아갈 수 있습니다.

    $inputs = str_replace("\n", " ", $_POST['field']); 
    $inputs = str_replace("\r", "", $inputs); 
    

    예 우리는 여전히 \ r 모두 함께 (바보 같은 창) 무시하고 있습니다. 배열을 사용하는 방법에 대해 읽고 싶은 모든 제안은 & 폭발과 str_replace를 폭발시킵니다. 많은 사람들이 이에 대해 논평하고 str_replace가 좋지 않으며 정규식을 배워야한다고 말합니다. 숙련 된 개발자로서 나는 정규 표현식 치환이 단순한 문자 치환에서 더 나은 기능을 제공하는 경우가 거의없고, 완전히 새로운 명령 언어를 배우게됩니다. 지금은 정규식을 사용 하겠지만 가까운 장래에 정규식을 확실히 배우라고 말하는 사람들은 무시하십시오. 당신은 결국이 성질의 것이 아니라 단지 그것을 필요로 할 것입니다.그런 다음 2 줄에 두 단어를 제출할 경우

    http://php.net/manual/en/language.types.array.php

    http://php.net/manual/en/function.explode.php

    http://php.net/manual/en/function.implode.php

    http://php.net/manual/en/function.str-replace.php

    http://php.net/manual/en/function.preg-match.php

    +0

    대단히 감사합니다, Dan. – user1951663

    +0

    아무런 문제가 없으면 내 프로필 및 내 웹 사이트에서 연락처 세부 정보를 찾을 수 있습니다. –

    관련 문제