对不起我的愚蠢问题,但我是一个rubyist,这是我第一次使用php。 我必须使用preg_replace清理一些HTML代码。
这是一段代码示例:
<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("/\'/", ''', $string);
$string = preg_replace('/\"/', '"', $string);
正则表达式也改变了HTML标签内的引用,这打破了我的HTML。我怎么能避免这个?是否有任何PHO istruction只能转换标签内的文字?
答案 0 :(得分: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]);