2013-06-22 230 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

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