我正在寻求解决处理列出书籍标题的“漂亮链接”或“永久链接”的问题,例如:
http://www.example.com/title/The-Catcher-in-the-Rye/
当我处理具有简单单词或空格的常规书名时,没有问题,因为我可以简单地用破折号替换空格并-
通过执行 reverse 来处理在数据库中查找书名str_replace
。
但是,当我的书名中包含撇号'
或冒号:
或两者都有时,就会出现问题,如本例所示:
Why Can't I Be You: A Novel
在我的sql数据库中,所有的单引号都被转义了,这样数据库中的条目如下:
+-----+-------------------------------+
| BID | book_title |
+-----+-------------------------------+
| 1 | Why Can\'t I Be You: A Novel |
+-----+-------------------------------+
当我列出所有书名时,我再次取消转义字符串,因此它简单地列出为: Why Can't I Be You: A Novel
我的<a>
链接显示了未转义的标题,通过用破折号替换空格并省略撇号和冒号创建了漂亮的链接,如下所示:
<a href="http://www.example.com/title/why-cant-i-be-you-a-novel" title="Why Can't I Be You: A Novel">Why Can't I Be You: A Novel</a>
所以,解决我的问题。我希望能够列出格式化(未转义)的书籍的所有标题,并让带有连字符的“永久链接”/“漂亮链接”工作并将正确的标题返回给 GET 方法。
在我的.htaccess
条目中,我有以下内容RewriteRule
:
RewriteRule ^title/(.*[^/])/?$ viewbook.php?booktitle=$1 [NC,L]
这样做是获取随后的“漂亮”链接部分title/
并通过 GET 将其发送到viewbook.php
. 例如,对于《麦田里的守望者》一书,以下内容是通过 GET 发送的:The-Catcher-in-the-Rye
那里没问题,因为在 php 中解决这个问题很简单:
$booktitle = $_GET['booktitle'];
$goodBookTitle = str_replace('-', ' ', $booktitle);
// or we can do it all at once
$booktitle = str_replace('-', ' ', $_GET['booktitle']);
// Send $booktitle to SQL query and find the book
当没有找到撇号时,这很好用,但是,如果标题有撇号或冒号,则此方法无济于事,因为它不会在数据库中找到。我也不想使用WHERE book_title LIKE '%$booktitle%'
因为viewbook.php
必须完全匹配。
我正在寻找一个优雅或简单的解决方案,这将使我能够通过 a 解决这个问题,RewriteRule
而不必为 say slug
or向数据库添加额外的表permalink
,并且我不想在 url 中使用撇号,例如 %27 用于单引用。这是一个大型数据库,数据输入在电子表格中完成,导出为 CSV 并上传到 SQL 数据库。单个条目没有前端以允许诸如slug
或等效之类的事情。
我希望我的解释清楚。