Convert spaces, umlauts and special character letters for link - php

How can I make the browser accept the letters umlauts and spaces without decoding?
$str = 'Häuser & Hühner können nicht „Hallo“ sagen!';
$strent = htmlentities($str);
$strurl = rawurlencode($str);
echo ''.$str.'';
echo ''.$str.'';
unexpected output
Häuser & Hühner können nicht „Hallo“ sagen!
Häuser & Hühner können nicht „Hallo“ sagen!
expected ouput
Häuser & Hühner können nicht „Hallo“ sagen!

Current working result
$str = 'Häuser & Hühner können nicht „Hallo“ sagen!';
$strurl = rawurlencode($str);
echo ''.$str.'';
Häuser & Hühner können nicht „Hallo“ sagen!

Related

I got a problem with WooCommerce and my own Code [closed]

Closed. This question is not written in English. It is not currently accepting answers.
Stack Overflow is an English-only site. The author must be able to communicate in English to understand and engage with any comments and/or answers their question receives. Don't translate this post for the author; machine translations can be inaccurate, and even human translations can alter the intended meaning of the post.
Closed 8 days ago.
Improve this question
I got some problems with my Code. after coding it, everytime i wanna change the stock, a error appears: Hallo!
Seit WordPress 5.2 gibt es eine eingebaute Funktion, die erkennt, wenn ein Plugin oder ein Theme einen fatalen Fehler auf deiner Website verursacht, und dich deswegen mit dieser automatisierten E-Mail benachrichtigt.
In diesem Fall hat WordPress einen Fehler in deinem Theme „Open Shop Pro“ abgefangen.
Besuche zunächst deine Website () und überprüfe sie auf sichtbare Probleme. Besuche als nächstes die Seite, auf der der Fehler aufgetreten ist (.../wp-admin/post.php) und prüfe, ob es sichtbare Probleme gibt.
Bitte kontaktiere dein Hosting-Unternehmen, um Unterstützung bei der weiteren Untersuchung dieses Problems zu erhalten.
Wenn deine Website fehlerhaft zu sein scheint und du nicht mehr wie gewohnt auf dein Dashboard zugreifen kannst, hat WordPress jetzt einen speziellen „Wiederherstellungsmodus“. Auf diese Weise kannst du dich sicher in deinem Dashboard anmelden und weitere Untersuchungen durchführen.
Um deine Website zu schützen, läuft dieser Link in 1 Tag ab. Aber keine Sorge: Ein neuer Link wird dir per E-Mail zugeschickt, wenn der Fehler nach Ablauf der Frist erneut auftritt.
Wenn du Hilfe bei diesem Problem suchst, wirst du möglicherweise nach einigen der folgenden Informationen gefragt:
WordPress-Version 6.1.1
Aktives Theme: Open Shop Pro (Version 1.7.0)
Aktuelles Plugin: (Version )
PHP-Version 7.4.33
Fehler-Details
Ein Fehler vom Typ E_ERROR wurde in der Zeile 494 der Datei /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/themes/openshop-pro/functions.php verursacht. Fehlermeldung: Uncaught Error: Call to a member function is_in_stock() on null in /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/themes/openshop-pro/functions.php:494
Stack trace:
#0 /www/htdocs/w01aa47b/[domain deleted by me]/wp-includes/class-wp-hook.php(310): stock_catalog(Array)
#1 /www/htdocs/w01aa47b/[domain deleted by me]/wp-includes/plugin.php(205): WP_Hook->apply_filters(Array, Array)
#2 /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-product.php(2098): apply_filters('woocommerce_get...', Array, Object(WC_Product_Variation))
#3 /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/plugins/woocommerce/includes/wc-template-functions.php(3543): WC_Product->get_availability()
#4 /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/plugins/woocommerce/includes/class-wc-product-variable.php(367): wc_get_stock_html(Object(WC_Product_Variation))
#5 /www/htdocs/w01aa47b/[domain deleted by me]/wp-content/plugins/woocommerce/includes/class-wc-product-variable.php(312): WC_Produc
I deactivated my code and it then the error did not came back. Can anyone help me / explain me why that happens? Would be awesome :)
The Code that is doing the problem is following:
`function stock_catalog() {
global $product;
if ($product->is_in_stock()&& !has_term(array('Basiskurs', 'Cupcake Kurs','Drip Cake Kurs', 'Fault Line Cake Kurs','Feriencamp','Figuren Modellierkurs','Ganache Motivtorten Kurs','Kindergeburtstag','Pinselmalerei mit Wafer Paper Blumen','Royal Icing Cookie Kurs' ), 'product_cat')) {
echo '<font color="#20bf6b"><div class="stock margin-top-10 margin-bottom-25"> ' . __('Verfügbar', 'text-domain') . '<i class="fa fa-check"></i> '. '</div></font>';
}
if ($product->is_in_stock()&& has_term(array('Basiskurs', 'Cupcake Kurs','Drip Cake Kurs', 'Fault Line Cake Kurs','Feriencamp','Figuren Modellierkurs','Ganache Motivtorten Kurs','Kindergeburtstag','Pinselmalerei mit Wafer Paper Blumen','Royal Icing Cookie Kurs' ), 'product_cat')) {
echo '<font color="#20bf6b"><div class="stock margin-top-10 margin-bottom-25"> ' .number_format($product->stock, 0, '', '') . __(' Verfügbar', 'text-domain') . '<i class="fa fa-check"></i> '.'</div></font>';
}
if (! $product->is_in_stock() ) {
echo '<font color="#eb3b5a"><div class="out-of-stock margin-top-10 margin-bottom-25"> ' . __('Nicht verfügbar', 'text-domain') . '<i class="fa fa-times"></i> ' . '</div></font>';
}
}
add_action('woocommerce_get_availability', 'stock_catalog');
add_action('woocommerce_after_shop_loop_item_title', 'stock_catalog');`

Laravel Browsershot "node" not found

I got an error by using Browsershot in Laravel 8
(Laravel Code)
$content = view('welcome')->render();
return Browsershot::html($content)
->noSandbox()
->margins(18, 18, 24, 18)
->format('A4')
->showBackground()
->pdf(); }
Error
The command "node ^"C:^\xampp^\htdocs^\dashboard^\laravel8app^\vendor^\spatie^\browsershot^\src/../bin/browser.js^" ^"^{^\^"url^\^":^\^"file:^\/^\/C:^\^\Users^\^\User^\^\AppData^\^\Local^\^\Temp^\^\425041100-0302608001646305859^\^\index.html^\^",^\^"action^\^":^\^"pdf^\^",^\^"options^\^":^{^\^"args^\^":^[^\^"--no-sandbox^\^"^],^\^"viewport^\^":^{^\^"width^\^":800,^\^"height^\^":600^},^\^"displayHeaderFooter^\^":false,^\^"margin^\^":^{^\^"top^\^":^\^"18mm^\^",^\^"right^\^":^\^"18mm^\^",^\^"bottom^\^":^\^"24mm^\^",^\^"left^\^":^\^"18mm^\^"^},^\^"format^\^":^\^"A4^\^",^\^"printBackground^\^":true^}^}^"" failed. Exit Code: 1(General error) Working directory: C:\xampp\htdocs\dashboard\laravel8app\public Output: ================ Error Output: ================ Der Befehl "node" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
i fixed this with
->setNodeBinary('/usr/bin/node')

German characters in TCPDF - PHP [duplicate]

This question already has answers here:
TCPDF UTF-8 symbols not showing up
(16 answers)
utf8_encode function purpose
(4 answers)
Closed 1 year ago.
I cannot see German characters correctly in the generated pdf. Here is my code:
<?php
// Load autoloader (using Composer)
require __DIR__ . '/vendor/autoload.php';
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetPrintHeader(false);
$pdf->AddPage();
// create some HTML content
$html = '<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Die angeführten Preise sind Fixpreise für eine schlüsselfertige Ausführung gemäß Leistungsbeschreibung und Ausstattungsliste
und gelten bei einem Vertragsabschluss bis 31.12.2021.<br/>
Die m²-Angaben sind Cirka-Maße. Geringfügige Abweichungen sind möglich und auf Grundrissvarianten oder technische
Änderungen, behördliche Vorschriften etc. zurückzuführen.<br/>
In den oben genannten Preisen sind sämtliche in vorliegender Preisliste angeführten Kaufnebenkosten (mit Ausnahme der
Beglaubigungskosten und Barauslagen im Zusammenhang mit der Eintragung im Grundbuch) enthalten, der Verkauf erfolgt
provisionsfrei direkt vom Bauträger. Kosten im Zusammenhang mit der Finanzierung (insbesondere auch Kosten für die
Bankgarantie) sind von der Käuferseite zu tragen.
</body>
</html>';
$pdf->writeHTML(utf8_encode($html), true, false, true, false, '');
$pdf->lastPage();
$lastPage = $pdf->getPage();
$pdf->Output('generated.pdf', 'I');
And that's how it looks:
Looks all good on html though
just changed
$pdf->writeHTML(utf8_encode($html), true, false, true, false, '');
to
$pdf->writeHTML(($html), true, false, true, false, '');
and it worked!
You need to change the constructor, Set UTF-8 false and change new charset like below:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false)
In above example, I set encoding ISO-8859-1 instead of UTF-8 and I change true to false.
header('Content-type: text/html; charset=utf-8');
in addition to be really sure the browser understands, add a meta-tag:

Regex Double Quotes and html tags

I read data from csv file. And wrote it to string and now need to classify those data.
if (($handle = fopen($_FILES['app_bundle_upload_type']['tmp_name']['file'], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
$result.= $data[$c] . "<br />\n";
}
}
}
How Can I correctly use Regex to group this sort od data. I do care about everything inside " ". I tried regex = '/"(.*?)"/s'; But can't escape double quotes inside other quotes. What shall I do ? And ofc there's this whole html data which I do not have right now what to do.
That is my string
1;"admin_loginIncorrect";"Podane hasło jest nieprawidłowe";"1";"0"
2;"admin_logOut";"Wyloguj";"1";"0"
3786;"tutorial_text_3";"Wenn Sie
ein Produkt kaufen möchten dessen Preis Sie soeben aufgedeckt haben
tun Sie es schnell und klicken Sie auf ""kaufen"" - Sie haben dafür
20 Sekunden. Sie können aber eine Stunde oder einen Tag warten um zu
sehen ob der Preis noch weiter fällt. Das Aufdecken des Preises von
anderen Benutzern reduziert den Preis kontinuierlich weiter. Denken
Sie jedoch daran dass wenn Sie zu lange warten jemand wird schneller
sein als Sie!. ;5";"0" 3914;"auction_desc_22297";"MacBook 12" 256GB - Space Gray256 GB pamięci masowej flash z magistralą PCIe
na płycie głównejDwurdzeniowy procesorIntel Core
m3 1,1 GHzTurbo Boost do 2,2 GHz8 GB pamięci
RAMIntel HD Graphics 515Zawartość
opakowaniaMacBookZasilacz USB-C o mocy 29 WPrzewód zasilający USB-C (2 m)Cena zawiera koszt przesyłki."'"5";"0"
#EDIT
I started in wrong way. Using regex was to complex task. Thanks to fgetcsv i could do it a lot easier
if (($handle = fopen($fileName, "r")) !== FALSE) {
while (($data = fgetcsv($handle)) !== FALSE) { .... }}
It reads row by row and give it back in array
$data[$i]
Try this:
<?php
$string = '1;"admin_loginIncorrect";"Podane hasło jest nieprawidłowe";"1";"0" 2;"admin_logOut";"Wyloguj";"1";"0" 3786;"tutorial_text_3";"Wenn Sie ein Produkt kaufen möchten dessen Preis Sie soeben aufgedeckt haben tun Sie es schnell und klicken Sie auf ""kaufen"" - Sie haben dafür 20 Sekunden. Sie können aber eine Stunde oder einen Tag warten um zu sehen ob der Preis noch weiter fällt. Das Aufdecken des Preises von anderen Benutzern reduziert den Preis kontinuierlich weiter. Denken Sie jedoch daran dass wenn Sie zu lange warten jemand wird schneller sein als Sie!. ;5";"0" 3914;"auction_desc_22297";"MacBook 12" 256GB - Space Gray
256 GB pamięci masowej flash z magistralą PCIe na płycie głównejDwurdzeniowy procesorIntel Core m3 1,1 GHzTurbo Boost do 2,2 GHz8 GB pamięci RAMIntel HD Graphics 515
Zawartość opakowaniaMacBookZasilacz USB-C o mocy 29 WPrzewód zasilający USB-C (2 m)
Cena zawiera koszt przesyłki."\'"5";"0"';
$regex = '#"(?<quotes>[^"]*)"#';
preg_match_all($regex, $string, $matches);
var_dump($matches['quotes']);
See it here : https://3v4l.org/8Z8J5

php's json_encode and character representation

I'll try to present it as simple as I can:
I use json_encode() to encode a number of utf-8 strings from different languages and I notice that characters remain unchanged when they belong to ASCII table but everything else is returned as '\unnnn', where 'nnnn' a hexadecimal number.
See the code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<title>Multibyte string functions</title>
</head>
<body>
<h3>Multibyte string functions</h3>
<p>
<?php
//present json encode errors nicely:
//assign integer values to keys and error names to values
echo '<br /><b>Define JSON errors</b><br />';
$constants = get_defined_constants(true);
$json_errors = array();
foreach ($constants["json"] as $name => $value) {
if (!strncmp($name, "JSON_ERROR_", 11)) {
$json_errors[$value] = $name;
}
}
echo nl2br(print_r($json_errors, true), true);
//Display current detection order
echo "<br /><b>Current detection order 'mb_detect_order()':</b> ", implode(", ", mb_detect_order());
//Display internal encoding
echo "<br /><b>Internal encoding 'mb_internal_encoding()':</b> ", mb_internal_encoding();
//Get current language
echo "<br /><b>Current detection language 'mb_language()' ('neutral' for utf8):</b> ", mb_language();
//our test data
//a nowdoc that can break a <input> field;
$str = <<<'STR'
O'Reilly(\n) "& 'Big\Two # <span>bo\tld</span>"
STR;
$strings = array(
$str,
"Latin: tell me the answer and I might find the question!",
"Greek: πες μου την ερώτηση και ίσως βρω την απάντηση!",
"Chinese simplified: 告诉我答复,并且我也许发现问题!",
"Arabic: أخبرني الاجابة, انا قد تجد مسالة!",
"Portuguese: mais coisas a pensar sobre diário ou dois!",
"French: plus de choses à penser à journalier ou à deux!",
"Spanish: ¡más cosas a pensar en diario o dos!",
"Italian: più cose da pensare circa giornaliere o due!",
"Danish: flere ting å tenke på hver dag eller to!",
"Chech: Další věcí, přemýšlet o každý den nebo dva!",
"German: mehr über Spaß spät schönen",
"Albanian: më vonë gjatë fun bukur",
"Hungarian: több mint szórakozás késő csodálatos kenyér"
);
//show encoding and then encode
foreach( $strings as $string ){
echo "<br /><br />$string :", mb_detect_encoding($string);
$json = json_encode($string);
echo "<br />Error? ", $json_errors[json_last_error()];
echo '<br />json=', $json;
}
The above code will output:
Define JSON errors
Array
(
[0] => JSON_ERROR_NONE
[1] => JSON_ERROR_DEPTH
[2] => JSON_ERROR_STATE_MISMATCH
[3] => JSON_ERROR_CTRL_CHAR
[4] => JSON_ERROR_SYNTAX
[5] => JSON_ERROR_UTF8
)
Current detection order 'mb_detect_order()': ASCII, UTF-8
Internal encoding 'mb_internal_encoding()': ISO-8859-1
Current detection language 'mb_language()' ('neutral' for utf8): neutral
O'Reilly(\n) "& 'Big\Two # bo\tld" :ASCII
Error? JSON_ERROR_NONE
json="O'Reilly(\\n) \"& 'Big\\Two # bo\\tld<\/span>\""
Latin: tell me the answer and I might find the question! :ASCII
Error? JSON_ERROR_NONE
json="Latin: tell me the answer and I might find the question!"
Greek: πες μου την ερώτηση και ίσως βρω την απάντηση! :UTF-8
Error? JSON_ERROR_NONE
json="Greek: \u03c0\u03b5\u03c2 \u03bc\u03bf\u03c5 \u03c4\u03b7\u03bd \u03b5\u03c1\u03ce\u03c4\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03af\u03c3\u03c9\u03c2 \u03b2\u03c1\u03c9 \u03c4\u03b7\u03bd \u03b1\u03c0\u03ac\u03bd\u03c4\u03b7\u03c3\u03b7!"
Chinese simplified: 告诉我答复,并且我也许发现问题! :UTF-8
Error? JSON_ERROR_NONE
json="Chinese simplified: \u544a\u8bc9\u6211\u7b54\u590d\uff0c\u5e76\u4e14\u6211\u4e5f\u8bb8\u53d1\u73b0\u95ee\u9898!"
Arabic: أخبرني الاجابة, انا قد تجد مسالة! :UTF-8
Error? JSON_ERROR_NONE
json="Arabic: \u0623\u062e\u0628\u0631\u0646\u064a \u0627\u0644\u0627\u062c\u0627\u0628\u0629, \u0627\u0646\u0627 \u0642\u062f \u062a\u062c\u062f \u0645\u0633\u0627\u0644\u0629!"
Portuguese: mais coisas a pensar sobre diário ou dois! :UTF-8
Error? JSON_ERROR_NONE
json="Portuguese: mais coisas a pensar sobre di\u00e1rio ou dois!"
French: plus de choses à penser à journalier ou à deux! :UTF-8
Error? JSON_ERROR_NONE
json="French: plus de choses \u00e0 penser \u00e0 journalier ou \u00e0 deux!"
Spanish: ¡más cosas a pensar en diario o dos! :UTF-8
Error? JSON_ERROR_NONE
json="Spanish: \u00a1m\u00e1s cosas a pensar en diario o dos!"
Italian: più cose da pensare circa giornaliere o due! :UTF-8
Error? JSON_ERROR_NONE
json="Italian: pi\u00f9 cose da pensare circa giornaliere o due!"
Danish: flere ting å tenke på hver dag eller to! :UTF-8
Error? JSON_ERROR_NONE
json="Danish: flere ting \u00e5 tenke p\u00e5 hver dag eller to!"
Chech: Další věcí, přemýšlet o každý den nebo dva! :UTF-8
Error? JSON_ERROR_NONE
json="Chech: Dal\u0161\u00ed v\u011bc\u00ed, p\u0159em\u00fd\u0161let o ka\u017ed\u00fd den nebo dva!"
German: mehr über Spaß spät schönen :UTF-8
Error? JSON_ERROR_NONE
json="German: mehr \u00fcber Spa\u00df sp\u00e4t sch\u00f6nen"
Albanian: më vonë gjatë fun bukur :UTF-8
Error? JSON_ERROR_NONE
json="Albanian: m\u00eb von\u00eb gjat\u00eb fun bukur"
Hungarian: több mint szórakozás késő csodálatos kenyér :UTF-8
Error? JSON_ERROR_NONE
json="Hungarian: t\u00f6bb mint sz\u00f3rakoz\u00e1s k\u00e9s\u0151 csod\u00e1latos keny\u00e9r"
As you can see in most languages-except English-there is a hexadecimal conversion of utf-8 characters.
Is it possible to encode by not replacing my unicode characters? Is it safe? What other people do?
You should consider such encodings that are coming from user input in pages and stored to mysql.
Thanks.
Maybe you should try json_encode($string, JSON_UNESCAPED_UNICODE) , or any method in http://php.net/manual/fr/function.json-encode.php that may be usefull for your various cases.
Ok,
really thanks for the answer!
The problem is that I'm on version PHP Version 5.3.10 and json_encode($string, JSON_UNESCAPED_UNICODE) isn't an option.
Fortunately, a guy called "Mr Swordsteel" posted a comment at php's manual http://www.php.net/manual/en/function.json-encode.php which actually does the trick (thank you Mr Swordsteel!)
The real paradox is that it emulates completely json_encode function and gives a hint if we want to port it to another language like javascript and keep our libraries communicative.
function my_json_encode($in){
$_escape = function ($str) {
return addcslashes($str, "\v\t\n\r\f\"\\/");
};
$out = "";
if (is_object($in)){
$class_vars = get_object_vars(($in));
$arr = array();
foreach ($class_vars as $key => $val){
$arr[$key] = "\"{$_escape($key)}\":\"{$val}\"";
}
$val = implode(',', $arr);
$out .= "{{$val}}";
}elseif (is_array($in)){
$obj = false;
$arr = array();
foreach($in as $key => $val){
if(!is_numeric($key)){
$obj = true;
}
$arr[$key] = my_json_encode($val);
}
if($obj){
foreach($arr AS $key => $val){
$arr[$key] = "\"{$_escape($key)}\":{$val}";
}
$val = implode(',', $arr);
$out .= "{{$val}}";
}else {
$val = implode(',', $arr);
$out .= "[{$val}]";
}
}elseif (is_bool($in)){
$out .= $in ? 'true' : 'false';
}elseif (is_null($in)){
$out .= 'null';
}elseif (is_string($in)){
$out .= "\"{$_escape($in)}\"";debug('in='.$in.', $_escape($in)='.$_escape($in).', out='.$out);
}else{
$out .= $in;
}
return "{$out}";
}
I gave it a lot of tests and couldn't break it!
It would be very interesting now to re-implement json_decode!
Thanks.

Categories