Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中保留标记的同时替换HTML标记中的空格(preg_replace)?_Php_Html_Regex_Preg Replace - Fatal编程技术网

如何在PHP中保留标记的同时替换HTML标记中的空格(preg_replace)?

如何在PHP中保留标记的同时替换HTML标记中的空格(preg_replace)?,php,html,regex,preg-replace,Php,Html,Regex,Preg Replace,假设我有这个字符串: $string='

假设我有这个字符串:

$string='Prueba 123MATRICOM

托达斯·拉斯普鲁埃巴斯水族馆”

'

我想做的是使用PHP修复HTML标记(它们由于空格而格式不正确)。我在网上找到了几种不同的正则表达式,例如:

$html=trim(preg_replace('/','.$text))

以及:

$html=preg_replace(“//”,“,$text)

我正试图获得如下字符串输出(在HTML标记的前面部分和结尾部分删除空格):

”“这是我的荣幸

普拉巴123托达斯·拉斯普拉巴水族馆

'


背景:谷歌翻译倾向于在翻译结果中添加影响HTML结构的随机空格。只是想找一个快速的方法来清理标签。我已经搜索了两天如何执行此操作,但似乎找不到任何符合我所要查找的内容。

在大多数情况下,您可以使用
preg\u replace\u回调
解决方案:

$text='<p > ¡Esto es una prueba! < /p > <p> <strong > Prueba 123 </strong> </p> <p> <strong> <a href="https://matricom.net"> MATRICOM < / a> </ strong> </p> <p> <strong > Todas las pruebas aquí ... </strong > < /p>';
echo preg_replace_callback('~<[^<>]+>~u', function($m) { 
    return str_replace(' ', '', $m[0]); 
  // or,  preg_replace('~\s+~u', '', $m[0]); 
}, $text);

详细信息

  • char

这可能超出您的需要,但翻译HTML文件的过程(无论是通过机器翻译还是人工翻译)涉及通过过滤器解析HTML,该过滤器完全隐藏\保护HTML标记,使其不受翻译过程的影响。翻译编辑器只允许出于语言目的移动某些标记(在您的示例中,它可以是href)。此外,在某些语言中,粗体格式可能不可取

经过后期处理后,HTML仍保持原样,只更改了文本内容

请注意,您可能会发现Google translate有时也会翻译HTML标记的内容,这会导致各种问题


我可以更详细地解释解决方案,如果有兴趣,请告诉我。所需的工具可以免费获得

你是个救生员!感谢您的第二部分,这修复了删除“a href”空间的问题。明亮的非常感谢。你在回答什么问题?也许还不清楚,但是Google Translate在HTML标记中添加空格的问题-我提出了一个解决方案来防止这种情况发生。我最终将文本从HTML中分离出来,翻译文本,然后重新创建DOM来解决这个问题。它还减少了发送给转换器的字符数。虽然Witkor的答案解决了我眼前的问题,但后来它变得更加复杂,所以我采用了这个更复杂的解决方案。
'~<\s*(?:/\s*)?(?:p|a|strong)\s*>~u'