2016-06-17 5 views
-2

출력되는 문자열을 제어 할 수 없도록 CMS에서 생성되는 텍스트가 있습니다.PHP : 큰 따옴표로 바꾸기

나는 여러 가지 PHP 함수를 사용하여 큰 따옴표를 하나의 태그로 바꾸려고했지만 아무 소용이 없다. 누구든지 해결책을 제안 할 수 있습니까?

<?php 
$comments = str_replace('"', "'", ("6:00 pm , practiced "Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

오류 메시지 :

Parse error: syntax error, unexpected 'Zen' (T_STRING) in 

템플릿에서 전체 코드를 추가 :

{exp:query 
    sql="SELECT 
    t.entry_id, 
    entry_date, 
    field_id_4 as tunnel, 
    field_id_2 as log_time, 
    field_id_17 as log_video, 
    field_id_18 as log_comments 
    FROM exp_channel_data d, exp_channel_titles t 
    WHERE t.channel_id = 7 
    AND t.status != 'Delete' 
    AND author_id = '{embed:member_id}' 
    AND t.entry_id = d.entry_id 
    AND field_id_19 = '' 
    ORDER BY entry_id DESC" 
} 
    <?php 
    //strip out Playa bumph from our tunnel 
    $tunnel = substr(strrchr("{tunnel}","]"),2); 
    preg_match_all("/\[[^\]]*\]/", "{tunnel}", $matches); 
    $tunnel_id = trim($matches[0][0],'[,]'); 

    $time[] = array(
     "entry_id" => "{entry_id}", 
     "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
     "entry_date" => "{entry_date}", 
     "log_time" => "{log_time}", 
     "log_video" => "{log_video}", 
     "log_comments" => "{log_comments}"); 
    ?> 
{/exp:query} 

<script> 
    IBA.logged_time = <?php echo json_encode($time); ?> 
</script> 

log_comments 문제입니다.

+1

코드 서식을 살펴보십시오. – Rizier123

답변

1

문자열 리터럴에서 큰 따옴표를 이스케이프 처리해야합니다. 제거 할 필요가 umatched 왼쪽 괄호도 있습니다 :

<?php 
$comments = str_replace('"', "'", "6:00 pm , practiced \"Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

출력 :

6:00 pm , practiced 'Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed) 

편집 : 당신이 더 많은 코드를 게시 한 이후 나는 무슨 일이 일어나고 있는지를 참조하십시오. 다음 코드를 시도해보십시오. 내용에 "LOG_COMMENTS \ n"이 없으면 작동합니다.

$time[] = array(
    "entry_id" => "{entry_id}", 
    "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
    "entry_date" => "{entry_date}", 
    "log_time" => "{log_time}", 
    "log_video" => "{log_video}", 
    "log_comments" => <<<LOG_COMMENTS 
{log_comments} 
LOG_COMMENTS 
); 

그러나 이것은 매우 빈약 한 디자인입니다. CMS가 데이터베이스 또는 일반 텍스트 파일에 데이터를 저장할 수없는 이유가 있습니까?

+0

그게 문제입니다. 문자열을 제어 할 수 없습니다. 나는 그것을 벗어나려고했지만 그 중 하나가 작동하지 않았다. – KoalaKid

+0

어디에서 문자열을 가져 오나요? – ShiraNai7

+0

CMS 때문에 생성 된 내용을 제어 할 수 없습니다. – KoalaKid

0

편집 {log_comments}

{addslashes(log_comments)}에 당신은 당신이 건물의 과정에있는 당신의 문자열의 입력을 탈출하기 위해 필요하거나 해당 문자열은 자체가 불량 따옴표로 헤어 졌됩니다.

What it means to escape a string.

docs

+0

나는 그것을 시도했다. 나는 이것이 매우 간단해야한다는 것을 안다, 나는이 100 번을했을 것임에 틀림 없다. 그러나 그것은 단지 오류를 걷어차기를 계속한다. – KoalaKid

+0

그런 다음 오류를 추적하십시오. 오류를 우리에게 읽어주십시오. 어떤 행 번호와 열인지를 알기 위해 오류에서 충분한 피드백을 얻지 못하면 코드를 여러 행으로 나누십시오. 이 시점에서 나만의 문제를 해결할 수있을 것이라고 생각하지만이 문제의 핵심은 분명히 들어오는 문자열 스트림을 피할 필요가 있다는 것입니다. – Jonathan

+0

동의 함. 문제가되는 문자열 중 하나가 포함 된 일반 PHP 파일로 분해하고 생각할 수있는 모든 종류의 PHP 함수를 시도했습니다. – KoalaKid

0

당신은 아마 변수 안에 그 텍스트를 받아야 참조하십시오. 먼저 구문 오류를 만들지 않았는지 확인하십시오. 브라우저에서 해당 텍스트를 복사하여 str_replace()에 저장하려고 할 수 있습니다. 이렇게 인용문을 이스케이프 처리해야합니다.

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

슬래시를 사용합니다. 은 만 그렇게 최초의 특수 문자를 HTML 엔터티로 변환

$comments = str_replace('"', "'", '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'); 

또는 는이

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

$com = htmlspecialchars ($comments); 

$replacedText = str_replace("&quot;","&#039;",$com); 

echo $com; 

echo "<br/>"; 

echo $replacedText; 

같이 할 수있는 코드에서 그 부분을 사용할 수 있습니다. htmlspecialchars 그러면 str_replace 함수를 사용하여 견적을 쉽게 바꿀 수 있습니다.

당신이 실수 한 곳을 찾으십시오.