2016-06-21 2 views
-6

이것은 매우 간단해야하지만,이 코드를 90 번 이상 실행하여 알아 내려고합니다. 어떤 도움이라도 대단히 감사하겠습니다!지구상에서 str_replace가 onclick 함수를 벗겨내는 이유는 무엇입니까?

다음은 문맥에 대한 전체 기능입니다. 나는 즉시 내가 뭔가 단순한는 $ replacewith 변수를 변경하면

 $replacethis = '(<a href=\"([0-9]{2})\\.htm\">)'; 
    $linkArr = []; 

    $lessonNo = preg_match_all($replacethis, $originalcontent, $linkArr); 

    for($x = 0; $x < count($linkArr[1]); $x++) { 
     $replacethis = '<a href="'.$linkArr[1][$x].'.htm">'; 
     $replacewith = '<a style="cursor:pointer;" onclick="gotoScrollExercise('. $linkArr[1][$x] .'); return false;">'; 
     $originalcontent = str_replace($replacethis, $replacewith, $originalcontent); 
    } 

, 나는 아무 문제가 없지만 : 나는

<a style="cursor:pointer;" onclick="gotoScrollExercise(04); return false;"> 

과 기능을

<a href="04.htm"> 

을 대체하는 것을 시도하고있다 onclick 함수를 추가하면 문자열의 해당 부분 만 무시됩니다. 일을 해달라고

$replacewith = '<a id="blah" style="cursor:pointer;">'; 

예 :

$replacewith = '<a fdgdfgdf>'; 
$replacewith = '<a onclick="function()">'; 

왜 작동

예?

가 재생 될 예 :

$replacethis = '<a href="04.htm">'; 
$replacewith = '<a style="cursor:pointer;" onclick="gotoScrollExercise(04); return false;">'; 
$originalcontent = str_replace($replacethis, $replacewith, $originalcontent); 

output is: 
<a style="cursor:pointer;"> 
+2

작은 따옴표로 묶은 문자열이 있으므로 작은 따옴표를 이스케이프 처리해야합니다. 작은 따옴표로 묶어서는 안되는 큰 따옴표를 이스케이프 처리합니다. 작은 따옴표를 이스케이프합니다. – chiliNUT

+1

당신은 '0'에서 루프를 시작하고 regexes의 캡처 그룹은 항상 캡처 결과 배열 [0] 인덱스를 전체 일치 문자열로 만듭니다. 예 : 'var_dump ($ linkArr)'를 사용하면 얻은 것을 볼 수 있습니다. –

+0

제안에 감사드립니다. marc,하지만 루프와는 아무 관련이 없습니다. 안녕하세요, 정규식의 출력에 만족합니다. 그리고 내가 error_log replacewith, 정확히 내가 원하는 방법입니다. 그것은 행복하지 않은 어려운 일일 것입니다. – olstearn

답변

0

난 당신이 코드로 작성하고 교체하려 정확히했다. 나를 위해 그것을 작동합니다 ..

working example

그래서, posibly 일부 오타 또는 당신이 여기 가져 오지 않았다 잊어 버린 무언가가있을 수 있습니다. 오류보고 (here is how)를 사용하고 데모에서 광산과 같은 코드를 사용했는지 확인하십시오.

+0

도움을 주셔서 감사합니다. 내가 생각할 수있는 것은 이것이 PHP 버전 문제였습니다. 나는 서버를 포기하고 그대로 스크립트를 업로드했다. PHP 버전 5.5.1이 책임이있는 것으로 보입니다. 5.6.2와 같은 문제 없음 – olstearn

관련 문제