PHP 替换 HTML 标签以外的字符
PHP replace characters except the HTML tags
我需要将字符串中的字符 0,1,2,...,9
替换为 \xD9\xA0,\xD9\xA1,\xD9\xA2,...,\xD9\xA9
。此字符串来自 CKEditor,因此它可能包含 html 标签。使用以下代码
$body = str_replace("1", "\xD9\xA1", $body);
它将每个 1
替换为 \xD9\xA1
因此它会影响标签 <h1>
和 <table border="1">
而我只需要替换正文中的数字而不是标签.
包含数字的标签是table标签的<h0><h1><h2><h3><h4><h5><h6>
和cellspacing
以及cellpadding
和border
。
如何在不影响 <h0><h1><h2><h3><h4><h5><h6>
and cellspacing
and cellpadding
and border
的情况下用上述符号替换数字?
你不应该使用正则表达式来处理 html,但是如果你仍然想使用正则表达式,你可以像这样使用带有正则表达式的丢弃模式:
<.*?>(*SKIP)(*FAIL)|1
这个正则表达式背后的想法是跳过 <...>
中的任何内容,但匹配其余部分。因此,它只会匹配不在 html 标签内的数字 1
。再一次,我会改用 html 解析器。
Php代码
$re = "/<.*?>(*SKIP)(*FAIL)|1/";
$str = "<h0><h1><h2><h3>\n<table border=\"1\">\n1\n";
$subst = "\xD9\xA1";
$result = preg_replace($re, $subst, $str);
我需要将字符串中的字符 0,1,2,...,9
替换为 \xD9\xA0,\xD9\xA1,\xD9\xA2,...,\xD9\xA9
。此字符串来自 CKEditor,因此它可能包含 html 标签。使用以下代码
$body = str_replace("1", "\xD9\xA1", $body);
它将每个 1
替换为 \xD9\xA1
因此它会影响标签 <h1>
和 <table border="1">
而我只需要替换正文中的数字而不是标签.
包含数字的标签是table标签的<h0><h1><h2><h3><h4><h5><h6>
和cellspacing
以及cellpadding
和border
。
如何在不影响 <h0><h1><h2><h3><h4><h5><h6>
and cellspacing
and cellpadding
and border
的情况下用上述符号替换数字?
你不应该使用正则表达式来处理 html,但是如果你仍然想使用正则表达式,你可以像这样使用带有正则表达式的丢弃模式:
<.*?>(*SKIP)(*FAIL)|1
这个正则表达式背后的想法是跳过 <...>
中的任何内容,但匹配其余部分。因此,它只会匹配不在 html 标签内的数字 1
。再一次,我会改用 html 解析器。
Php代码
$re = "/<.*?>(*SKIP)(*FAIL)|1/";
$str = "<h0><h1><h2><h3>\n<table border=\"1\">\n1\n";
$subst = "\xD9\xA1";
$result = preg_replace($re, $subst, $str);