假设我有这个字符串:
$string = '<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>'
我想做的是使用PHP修复HTML标记(由于空格,它们的格式不正确)。我尝试了几种在网上找到的不同正则表达式,例如:
$html = trim(preg_replace('/<\s+>/', '<>', $text));
和:
$html = preg_replace('/<(.+?)(?:»| |″)(.+?)>/', '<\1\2>', $text);
我正在尝试获取这样的字符串输出(在HTML标签的开头和结尾部分删除了空格:]
'<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>'
背景故事:Google翻译倾向于在翻译结果中添加随机空格,这会影响HTML结构。只是在寻找一种清理标签的快速方法。我一直在寻找如何执行此操作的两天,似乎找不到适合我所寻找内容的任何东西。
在最一般的情况下,您可以使用preg_replace_callback
解决方案:
$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);
请参见PHP demo。
但是,您可能希望创建一种模式,使其仅与Google翻译输出中实际使用的标记匹配。对于a
,p
和strong
标签,它看起来像
'~<\s*(?:/\s*)?(?:p|a|strong)\s*>~u'
详细信息
<
-<
字符\s*
-0+空格(?:/\s*)?
-/
的可选序列,然后是0+空格(?:p|a|strong)
-p
,a
或strong
子字符串\s*
-0+空格>
-一个>
字符。这可能超出了您的需要,但是翻译HTML文件的过程(无论是MT还是人工的)都涉及通过过滤器解析HTML,该过滤器可完全隐藏/保护HTML标记不受翻译过程的影响。翻译编辑器仅允许出于语言目的移动某些标签(在您的示例中为href)。另外,在某些语言中,粗体格式可能不是理想的。
一旦对HTML进行后处理,就保持原样,只改变了文本内容。
[请注意,您可能会发现使用Google翻译时,HTML标记的内容有时也会被翻译,这会导致各种问题。
我可以更详细地解释该解决方案,请告诉我是否有兴趣。所需工具可免费获得。