我正在尝试创建一个Web应用程序,将任何选定的网页转换为简单的英文形式。我有一个单词翻译存储在My_SQL数据库中。到目前为止我有这个代码。它可以工作,但似乎只在一些标签而不是整个页面中做我想要的。我认为这可能是由于正则表达式错误造成的?
<?
$English = array();
$Simple = array();
$con = mysqli_connect("localhost","root","root","Words");
$getmodels = mysqli_query($con, "SELECT * FROM Wordsweb");
while($res = mysqli_fetch_assoc($getmodels)) {
$English[] = $res['English'];
$Simple[] = $res['Simple'];
}
$url = $_GET['url'];
$string = file_get_contents($url);
$text_to_echo = preg_replace_callback(
"/(<([^.]+)>)([^<]+)(<\\/\\2>)/s",
function($matches) use ($English, $Simple) {
/*
* Indexes of array:
* 0 - full tag
* 1 - open tag, for example <h1>
* 2 - tag name h1
* 3 - content
* 4 - closing tag
*/
$matches[3] = strtolower($matches[3]);
$text = str_replace($English, $Simple, $matches[3]);
return $matches[1].$text.$matches[4];
},
$string
);
echo "<base href=\"" . $url . "/\" />";
echo $text_to_echo;
?>
答案 0 :(得分:1)
您可以使用DOM + Xpath来获取和更改HTML文档中的文本节点:
$html = <<<'HTML'
<html>
<body>
<h1>Hello World!</h1>
<div>
<p>Lorem Ipsum...</p>
</div>
</body>
</html>
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->evaluate("//text()");
foreach ($nodes as $node) {
$node->nodeValue = strToUpper($node->nodeValue);
}
echo $dom->saveHtml();