PHP: Как преобразовать одинарные кавычки в двойные кавычки во всех тегах HTML? - PullRequest
5 голосов
/ 28 мая 2009

Как я могу преобразовать все одинарные кавычки в двойные кавычки только во всех тегах HTML? Есть ли более простой способ сделать это? Спасибо:)

Например: Как я могу преобразовать эту строку (фактические данные из моей работы):

<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style="font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>

К этому:

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" style="font-size:10" COLOR="#0B333C">My name's Mark</FONT></P></TEXTFORMAT>

Ответы [ 6 ]

3 голосов
/ 28 мая 2009

Если вас не волнуют проблемы JavaScript и CSS, упомянутые в другом месте, попробуйте следующее:

$text = "<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style='font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>";
echo preg_replace('/<([^<>]+)>/e', '"<" . str_replace("\\\\\'", \'"\', "$1") . ">"', $text);

Это взято из ветки кем-то, у кого точно такая же проблема, как у вас на devshed.com .

3 голосов
/ 28 мая 2009

Я предполагаю, что когда вы говорите во всех HTML-тегах, вы имеете в виду все одинарные кавычки, которые содержат атрибут. Вы не хотели бы, чтобы <a onclick="alert('hi')"> конвертировали, потому что это сломало бы код.

Любое регулярное выражение будет хрупким. Если вы знаете, что ваш ввод будет определенным набором простых случаев, вы можете использовать регулярное выражение . В противном случае вам понадобится DOM-парсер, который понимает сложную HTML-разметку, например onmouseover="(function () { document.getElementById(''); alert(\"...\")...})()" (например). Добавьте к этому атрибут может занимать несколько строк. ;)

В последнее время мне не приходилось решать эту конкретную проблему, но, может быть, есть хороший способ сделать это с помощью HTML Tidy (подробнее здесь: http://devzone.zend.com/article/761) или такого синтаксического анализатора http://sourceforge.net/projects/simplehtmldom/

1 голос
/ 28 мая 2009

Я знаю, что мог бы использовать regex, но попробуй: назначить $ string содержимое, используя fpen (), fread () и т.д ...

$string = str_replace("'", '"', $string);
$array = explode('>', $string);
foreach($array as $key => $value){
    if(strpos($value, '<') <> 0 ){
       $array[$key] = str_replace('"', "'",$value);
    }
}
$string = implode('>',$array);
0 голосов
/ 28 мая 2009

Я бы выбрал либо парсер dom, либо бросил свой собственный простой парсер тегов, который понимает как кавычки, так и экранирующие символы кавычек, чтобы не принимать "he said \"blah\"" как he said \, blah\ и пусто строка .

Может легко определить, находится ли изменяемая цитата внутри тега. За многие годы я узнал, что регулярные выражения слишком хрупки для таких задач.

0 голосов
/ 28 мая 2009

Используйте Tidy , который может исправить ваш HTML-суп и вывести чистый XHTML. Он также делает и другие приятные вещи, такие как исправление проблем с вложением, теги нижнего регистра, и так далее, и так далее.

0 голосов
/ 28 мая 2009

Не совсем точно, что именно вы пытаетесь достичь ... Замена фрагментов строки с помощью php может быть сделана с помощью функции str_replace:

str_replace("'", "\"", $yourString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...