首页 > 解决方案 > PHP 文件中嵌入式 SQL 的 Notepad++ 语法高亮

问题描述

Notepad++ 与 Scintilla 词法分析器一起工作,以某种方式识别 .php 文件中的语言切换。它似乎默认为 HTML 并识别<?php ... ?>,并<script type="text/javascript">...</script>作为嵌入式 PHP 和 javascript 语言的分隔符,因此应用了正确的语法突出显示和代码完成。

问题:是否有可能让它对 SQL 做同样的事情,也许使用 heredoc 分隔符,例如<<<sql ... sql

我搜索了 web 和 notepad++ 论坛,但没有成功。UDL 根据其扩展名处理文件的内容,这无济于事,因为我专门寻找嵌入在 .php 文件中的代码。我还尝试在记事本的 ProgramData 文件夹中挖掘文件,但找不到任何定义语言切换分隔符的内容。

SQL 的记事本插件都希望将文件的全部内容格式化为 sql,所以这也无济于事,我只希望它仅适用于嵌入式部分。事实上,我宁愿找到一个没有插件也能工作的解决方案。

编辑:根据要求的示例代码

<p>Some html code here</p>
<?php
$value1 = 1234;
$sql = <<<sql
select * from table1
where column1 = $value1
sql;
$rows = mysqli->query($sql);
?>
<script type="text/javascript">
var results = <?php echo queryToJSresults($rows);?>;
</script>

一切都是在 Notepad++ 中正确突出显示的语法。我想要的是语法高亮<<<sqlsql使用 SQL 之间的位。目前它(正确地)将其视为字符串文字,与带引号的字符串相同。

标签: phpsqlnotepad++syntax-highlighting

解决方案


你要做的是一件很难的事情。可以使用用户定义语言 (UDL) 工具来完成,但我认为不会得到您期望的确切结果。

假设您要打开一个 .php 文件扩展名并获取以下行:

$result = mysql_query('SELECT * WHERE 1=1');

这一行有一个有效的 SQL 语句,但是这个语句是一个字符串,UDL 将它识别为一个字符串,在 markSELECTWHERE

您可以创建一个全新的 UDL,与 PHP 的原生 Notepad++ 完全相同,但丢弃字符串的突出显示。之后,添加保留的 SQL 键以突出显示(SELECT、FROM、IN 等)。

PRO:突出显示获取 SQL

CON:丢失的字符串在整个文件中突出显示

对我来说,成本比收益更重要

根据您的建议添加特殊标记

<<< sql ... sql?

这将使文件无法编译,所以我会放弃这个选项。


推荐阅读