2013-06-22 233 views
3

我需要的正则表达式替换<>&&lt;&gt;&amp; 但这种角色我想更换只是<body></body>标签替换字符串PHP的一部分

例如

之前更换

<head> <><><>& </head> <body><><>&</body> 

替换后

<head> <><><>& </head> <body>&lt;&gt;&lt;&gt;&amp;</body> 

谢谢:)

回答

0

,我认为那是你真正需要的是:

  1. XML解析器解析您的字符串,并获得<body>部分。有关更多信息,请参阅this question;
  2. htmlspecialchars()为结果。

编辑:如果你确切地知道html的样子,你当然也explode</head><body>的分裂你的输入有两种,但是这将是高度依赖于输入的准确格式所以我不会推荐它。

+0

我需要这个,因为我有大的更换xml文件与此<, >和在和simplexml_load_file()无法读取文件 现在我加载文件与文件获取内容,然后我想用preg_replace – php12345

+0

@ php12345替换也许像XMLReader的工作,看到我链接的问题至。 – jeroen

+0

@ php12345看我的编辑。 – jeroen

0

说明

要使用正则表达式做到这一点ti'll需要几个步骤来完成:

  1. 捕捉身体的内部串:

    正则表达式:(^.*?<body>)(.*)(<\/body>)$

    enter image description here

    垫子CHES:

    [0] => <head> <><><>& </head> <body><><>&</body> 
    [1] => <head> <><><>& </head> <body> 
    [2] => <><>& 
    [3] => </body> 
    
  2. 分别替换每个类型字符的内部匹配[2]

  3. 重构串

PHP代码示例

$sourcestring="<head> <><><>& </head> <body><><>&</body>"; 
preg_match('/(^.*?<body>)(.*)(<\/body>)$/ims',$sourcestring,$matches); 

$header=$Matches[1]; 
$body=$matches[2]; 
$footer=$Matches[3]; 

$body = preg_replace('/</ims','&lt;',$body); 
$body = preg_replace('/>/ims','&gt;',$body); 
$body = preg_replace('/&/ims','&amp;',$body); 

$output = $header . $body . $footer; 
0

我已经做它有一些窍门。首先,我发现身体标签之间的文字,然后我将其更改为html特殊字符并保存。从那以后,我与[TO_BE_REPLACED]代替body标签之间的文本,并在最后,我改变文本与()所用htmlspecialchars转义文本

<?php 
$str = '<head> <><><>& </head> <body><><>&</body>'; 
preg_match('/<body>(.*?)<\/body>/', $str, $match); 
$special = htmlspecialchars($match[1]); // you can use html entities as well 
$str = preg_replace('/<body>(.*?)<\/body>/','<body>[TO_BE_REPLACED]</body>',$str); 
echo htmlspecialchars(str_replace('[TO_BE_REPLACED]', $special, $str)); //this one is only to show purpose 
echo '<br>----<br>'; 
echo str_replace('[TO_BE_REPLACED]', $special, $str); 
?> 

Check demo

+0

这也会将双引号和单引号更改为它们各自的字符,而不包含在OP中。 –

+0

@Denomales他可以使用str_replace数组,如果不需要htmlspecialchars()。他没有提及**,只是**这些字符将被替换。 – Robert

+0

的确如此,但是他非常清楚需要替换哪些字符。 –