문제

그래서 나는 흥미로운 문제가 있습니다 : 나는 끈이 있고, 대부분의 경우, 나는 무엇을 기대 해야하는지 알고 있습니다.

http://www.someurl.com/st=????????

이 경우를 제외하고,? 's는 대문자 또는 숫자입니다. 문제는 문자열이 쓰레기가 혼합되어 있다는 것입니다. 문자열은 5 ~ 6 개 조각으로 나뉘어져 있으며, 그 사이에는 많은 쓰레기가 있습니다 : 인쇄 할 수없는 캐릭터, 외국 문자 및 평범한 오래된 일반 문자가 있습니다. 요컨대, 다음과 같이 보이는 것 : nyþ = mî; ëmý × nüqï

일반적으로 마지막 8 자 (The? 's는 마지막에 함께 이루어 지므로 현재 PHP가 마지막 8 숯을 잡고 최선을 다하고 있습니다. 때때로 그것은 작동하지 않으므로 더 강력한 솔루션이 필요합니다.

문제는 기술적으로 해결할 수 없지만 최상의 솔루션은 문자열 끝에서 문자가 통상이거나 숫자 인 동안 캐릭터를 잡는 것입니다. 내가 8 이상을 얻으면 그것이 정확하다고 가정하십시오. 그렇지 않으면 ST =를 찾아 8 자 할당량을 채우는 데 필요한만큼 앞으로 캐릭터를 잡습니다. 이 작업을 수행하는 방법이 있습니까? 아니면 소매를 굴려 중첩 루프 스타일로 가야합니까?

업데이트:

혼란을 없애기 위해 다음과 같은 입력 문자열을 얻습니다.

[garbage]http:/[garbage]/somewe[garbage]bsite.co[garbage]m/something=[garbage]????????

쓰레기가 끈의 예측할 수없는 위치에있는 것을 제외하고 (끝은 결코 쓰레기가 아님) 예측할 수없는 길이를 가지고 있습니다 (적어도 나는 패턴을 찾을 수 없었습니다). 일반적으로? S는 모두 함께이므로 마지막 8 숯을 잡고 있지만 때로는 누락 된 데이터가 발생하지 않고 쓰레기를 반환하지 않습니다.-

도움이 되었습니까?

해결책

$var = '†http://þ=www.ex;üßample-website.î;ëcomÝ×ü/joy_hÏere.html'; // test case

$clean = join(
    array_filter(
        str_split($var, 1),
        function ($char) {
            return (
                array_key_exists(
                    $char,
                    array_flip(array_merge(
                        range('A','Z'),
                        range('a','z'),
                        range((string)'0',(string)'9'),
                        array(':','.','/','-','_')
                    ))
                )
            );
        }
    )
);

하, 그것은 농담이었다. 다음은 귀하를위한 재 촬영입니다.

$clean = preg_replace('/[^A-Za-z0-9:.\/_-]/','',$var);

다른 팁

언급했듯이 문제는 해결할 수 없습니다. 쓰레기에 "평범한 오래된 일반 문자"문자가 포함되어 있고 쓰레기가 문자열 끝에 떨어질 수 있다면이 샘플의 대상 문자열이 "abcdefgh"또는 "bcdefghi"인지 알 수 없습니다.

__http:/____/somewe___bsite.co____m/something=__ABCDEFGHI__

이 값은 무엇을 나타내나요? 데이터베이스에서 쓰레기를 처리하지 않고도 모든 것을 유지하려면 bin2Hex ().

이 정규식을 사용할 수 있습니다.

if (preg_match ( '/['^^£ $%&*()} {@#~?> <>, | = _+¬-]/', $ string) == 1)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top