2014-02-03 4 views
-1

Извините за мой тупой вопрос, но я рубист, и это первый раз, когда я использую php. Я должен очистить, используя preg_replace некоторый HTML-код.MySQL, PHP, одиночная цитата и двойная кавычка

Это образец фрагмент коды:

 <span style="font-size: 13pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: bold; line-height: 17pt;">Come funziona il segnale televisivo?</span><br> 
      Per capire cosa sono i 100 Hz e i 200 Hz dobbiamo fare un passo indietro e capire come funziona il sistema televisivo. "Interlacciato" indica il modo in cui queste linee vengono usate per comporre un fotogramma, ovvero una singola frazione d'immagine: <strong>anziché mostrare un fotogramma intero da 576 linee, quando il segnale è interlacciato vengono mostrati rapidamente e in successione le 288 linee pari e poi le 288 linee dispari.</strong> Il totale è sempre 576 ma, al posto di avere un solo fotogramma, avremo due mezzi-fotogrammi, chiamati tecnicamente semiquadri, che contengono la metà della risoluzione totale. Susseguendosi rapidamente, questi semiquadri ingannano l'occhio umano che li percepirà come un unico frame, ma si tratta sempre di 288 linee pari seguite da 288 linee dispari. Il disegno sotto aiuta a capire il concetto.<br> 
     </span> 
    </p> 
    <p style="text-align: center;"><img width="560" height="375" alt="" src="http://www.dday.it/userFiles/FCK/foto1.jpg"></p> 
    <p> 
     <span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;"> Il contrario di interlacciato è il “progressivo”: <strong>un’immagine progressiva è anch'essa composta da semiquadri, ma ciascuno di questi semiquadri è completo</strong>, quindi con 576 linee.</span> 
    </p> 
    <p style="text-align: center;"><img align="absMiddle" alt="" src="http://www.dday.it/userFiles/FCK/foto2(1).jpg"></p> 
    <p> 
     <span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;"><br></span> 
     <span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;"> Veniamo ora alla frequenza di quadro: <strong>u</strong><strong>n secondo di video è composto da 25 fotogrammi che, nel caso dell’interlacciato, sono composti a loro volta da due semiquadri</strong>: 25 moltiplicato per due fa proprio 50 Hz.</span> 
    </p> 
    <p style="text-align: center;"><img width="500" height="200" alt="" src="http://www.dday.it/userFiles/FCK/foto-3.jpg"></p> 
    <p> 
     <span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;"><br><br></span> 
    </p> 
</div> 

Когда я пытаюсь обновить БД с запросом я получаю сообщение об ошибке для одинарных кавычек и двойных кавычек в моем HTML. Я знаю, что я должен заменить одинарные и двойные кавычки, но если я использую регулярное выражение, как это:

$string = preg_replace("/\'/", '&#39;', $string); 
$string = preg_replace('/\"/', '&quot;', $string); 

Изменения регулярного выражений также котировку в моем HTML тегов и это сломало мой HTML. Как я могу избежать этого? Есть ли какая-либо функция PHO для преобразования только текста внутри тегов?

+1

Звуки, как вы используете конкатенацию/интерполяции для установки ваших значений запроса. ** Не делайте этого **. Вместо этого используйте подготовленные инструкции и привязки параметров. Преобразование входящих данных - это надежный способ потерять ценную информацию. – Phil

+0

Я думаю, что stripslashes - это то, что вы хотите: http://www.php.net/stripslashes - более или менее волшебство. –

+0

@ datamafia Ты шутишь, не так ли? – Phil

ответ

1

Как уже упоминалось, сохраните исходную HTML-строку как есть, безопасно и надежно, используя подготовленный оператор. Вот пример PDO (редактирует, если выяснится, что вы используете MySQLi но мое предположение, что вы используете MySQL расширение which you shouldn't be doing anyway)

$pdo = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'pass', [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_EMULATE_PREPARES => false, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]); 

$stmt = $pdo->prepare('UPDATE `someTable` SET `html` = ? WHERE `id` = ?'); 
$stmt->execute([$string, $someTupleIdentifier]); 
Смежные вопросы