我想用<
<
我在php中尝试这个。
到目前为止,我已经做了很多工作,但我正在努力进一步:
preg_replace('\(<pre>)[<](<\/pre>)\', '<', $content);
我正在使用http://www.regexr.com/测试我的表达,但到目前为止找不到合适的表达式。
任何帮助表示赞赏。
使用htmlspecialchars的问题在于其用户输入。所以我不能告诉字符串中的位置,甚至他们是否会使用pre标签。但如果他们这样做,我希望这些规则适用。所以不能专门针对它。
答案 0 :(得分:1)
只需使用http://docs.php.net/manual/en/function.htmlspecialchars.php对这些字符进行编码
即
echo "<pre>" . htmlspecialchars($content) . "</pre>";
修改强>
正如作者认为适合改变问题的主旨一样。
使用http://www.php.net/manual/en/function.preg-split.php拼接字符串并根据需要应用htmlspecialchars
。
我会建议正则表达式<pre/?>
答案 1 :(得分:1)
如果没有嵌套的<pre
- 代码,我会使用preg_replace_callback:
$str = "<pre>< left < arrow < <</pre>";
$pattern = '~<pre[^>]*>\K.*(?=</pre>)~Uis';
$str = preg_replace_callback($pattern, function ($m) {
return str_replace("<", "<", $m[0]);
}, $str);
echo $str;
模式匹配<pre...>...</pre>
内的代码。 Test on regex101,Regex FAQ
Uis
:U(PCRE_UNGREEDY),i(PCRE_CASELESS),s(PCRE_DOTALL)(.*)
任意数量的字符ungreedy(U修饰符)</pre>
calback是一个简单的str_replace <
到<
。
在eval.in上测试。如果它不起作用,可能有较旧的PHP版本,但不支持anonymous functions,请使用普通函数like this。
答案 2 :(得分:0)
这是我永远不会做的事,但如果需要,这是一种方法:
$text = "<pre>
last_name, first_name
<bjorge>, philip
kardashian, kim
mercury, freddie
</pre>
adgrgws, apvoih
asvpaiovjas aspvojas ass0voj
<pre>
last_name2, first_name
<bjorge>, philip
kardashian, kim
mercury, freddie
</pre>";
preg_match_all("#\<pre\>(.+?)\<\/pre\>#s",$text,$out);
var_dump($out[1]);
foreach($out[1] as &$val){
$val = str_replace ( '<', '<',$val);
}
var_dump($out[1]);