我想在 PHP 中使用 preg_match 從 html 檔案中決議站點語言;
我的預賽:
$sitelang = preg_match('!<html lang="(.*?)">!i', $result, $matches) ? $matches[1] : 'Site Language not detected';
當我有一個沒有任何類或 ID 的簡單屬性時。例如: 輸入:
<html lang="de">
輸出:
de
但是當我有一個像這樣的其他 html 代碼時: 輸入:
<html lang="en" class="desktop-view not-mobile-device text-size-normal anon">
輸出:
en " vertical-align: inherit;">我只需要語言代碼(en,de,en-En,de-DE)。
感謝您的建議或代碼。
uj5u.com熱心網友回復:
您可以使用此代碼以正確的方式進行檢測:
preg_match('!<html.*\s lang="([^"] )"!i', $result, $matches)
它也適用于您的最后一個樣本
uj5u.com熱心網友回復:
除了使用正則運算式決議 HTML 的標準免責宣告之外,您可能還需要兩件事。首先,去掉模式中的右括號。一旦你有關閉報價,該行的其余部分就無關緊要了。其次,確保引號內的內容本身不包含引號。
當前,打開報價,然后是任何內容,然后關閉報價:
preg_match('!<html lang="(.*?)">!i', $result, $matches)
這意味著如果你lang="foo" 得到foo" vertical-align: inherit;">匹配,因為正則運算式是貪婪的,并且整個字串可以被認為是在兩組獨立的最外層引號內。
新的,在引號內,一個或多個除引號外的任何內容:
preg_match('!<html lang="([^"] )"!i', $result, $matches)
如果您想更有彈性,請將硬空格更改為一個或多個空格字符:
preg_match('!<html\s lang="([^"] )"!i', $result, $matches)
uj5u.com熱心網友回復:
非常感謝亞歷克斯。
但是現在當 lang 屬性不在 html 標記之后時,我無法決議。
<html data-n-head-ssr lang="en">
輸出:
未檢測到站點語言有什么
想法嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492734.html
上一篇:基于付款后購買的多個產品的Woocommerce自定義重定向
下一篇:使用php連接三個表并顯示值
